Check for NEED_RESCHED_LAZY, not just NEED_RESCHED, prior to transferring
control to a guest.  Failure to check for lazy resched can unnecessarily
delay rescheduling until the next tick when using a lazy preemption model.

Fixes: 621191d709b1 ("Drivers: hv: Introduce mshv_root module to expose 
/dev/mshv to VMMs")
Signed-off-by: Sean Christopherson <sea...@google.com>
---
 drivers/hv/mshv_common.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/hv/mshv_common.c b/drivers/hv/mshv_common.c
index 1acc47c4be0d..b953b5e21110 100644
--- a/drivers/hv/mshv_common.c
+++ b/drivers/hv/mshv_common.c
@@ -151,7 +151,7 @@ static int __mshv_do_pre_guest_mode_work(ulong th_flags)
        if (th_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL))
                return -EINTR;
 
-       if (th_flags & _TIF_NEED_RESCHED)
+       if (th_flags & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY))
                schedule();
 
        if (th_flags & _TIF_NOTIFY_RESUME)
@@ -163,7 +163,8 @@ static int __mshv_do_pre_guest_mode_work(ulong th_flags)
 int mshv_do_pre_guest_mode_work(void)
 {
        const ulong work_flags = _TIF_NOTIFY_SIGNAL | _TIF_SIGPENDING |
-                                _TIF_NEED_RESCHED  | _TIF_NOTIFY_RESUME;
+                                _TIF_NEED_RESCHED  | _TIF_NEED_RESCHED_LAZY |
+                                _TIF_NOTIFY_RESUME;
        ulong th_flags;
 
        th_flags = read_thread_flags();
-- 
2.51.0.261.g7ce5a0a67e-goog


Reply via email to