Use the kernel's common "entry virt" APIs to handle pending work prior to
returning to a lower VTL.  Drop the now-defunct common MSHV helper for
doing work as the VTL driver was the last user.

No functional change intended.

Signed-off-by: Sean Christopherson <sea...@google.com>
---
 drivers/hv/Kconfig         |  1 +
 drivers/hv/mshv.h          |  2 --
 drivers/hv/mshv_common.c   | 22 ----------------------
 drivers/hv/mshv_vtl_main.c | 11 +++--------
 4 files changed, 4 insertions(+), 32 deletions(-)

diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig
index 894037afcbf9..b00b2b3fe3db 100644
--- a/drivers/hv/Kconfig
+++ b/drivers/hv/Kconfig
@@ -85,6 +85,7 @@ config MSHV_VTL
        # Therefore, do not attempt to access or modify MTRRs here.
        depends on !MTRR
        select CPUMASK_OFFSTACK
+       select VIRT_XFER_TO_GUEST_WORK
        default n
        help
          Select this option to enable Hyper-V VTL driver support.
diff --git a/drivers/hv/mshv.h b/drivers/hv/mshv.h
index 0340a67acd0a..d4813df92b9c 100644
--- a/drivers/hv/mshv.h
+++ b/drivers/hv/mshv.h
@@ -25,6 +25,4 @@ int hv_call_set_vp_registers(u32 vp_index, u64 partition_id, 
u16 count,
 int hv_call_get_partition_property(u64 partition_id, u64 property_code,
                                   u64 *property_value);
 
-int mshv_do_pre_guest_mode_work(ulong th_flags);
-
 #endif /* _MSHV_H */
diff --git a/drivers/hv/mshv_common.c b/drivers/hv/mshv_common.c
index eb3df3e296bb..aa2be51979fd 100644
--- a/drivers/hv/mshv_common.c
+++ b/drivers/hv/mshv_common.c
@@ -138,25 +138,3 @@ int hv_call_get_partition_property(u64 partition_id,
        return 0;
 }
 EXPORT_SYMBOL_GPL(hv_call_get_partition_property);
-
-/*
- * Handle any pre-processing before going into the guest mode on this cpu, most
- * notably call schedule(). Must be invoked with both preemption and
- * interrupts enabled.
- *
- * Returns: 0 on success, -errno on error.
- */
-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 | _TIF_NEED_RESCHED_LAZY))
-               schedule();
-
-       if (th_flags & _TIF_NOTIFY_RESUME)
-               resume_user_mode_work(NULL);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(mshv_do_pre_guest_mode_work);
diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c
index 4ca13c54c0a0..1eabed16aab9 100644
--- a/drivers/hv/mshv_vtl_main.c
+++ b/drivers/hv/mshv_vtl_main.c
@@ -8,6 +8,7 @@
  *   Naman Jain <namj...@linux.microsoft.com>
  */
 
+#include <linux/entry-virt.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/miscdevice.h>
@@ -727,22 +728,16 @@ static int mshv_vtl_ioctl_return_to_lower_vtl(void)
 {
        preempt_disable();
        for (;;) {
-               const unsigned long VTL0_WORK = _TIF_SIGPENDING | 
_TIF_NEED_RESCHED |
-                                               _TIF_NOTIFY_RESUME | 
_TIF_NOTIFY_SIGNAL |
-                                               _TIF_NEED_RESCHED_LAZY;
-               unsigned long ti_work;
                unsigned long irq_flags;
                struct hv_vp_assist_page *hvp;
                int ret;
 
-               ti_work = READ_ONCE(current_thread_info()->flags);
-               if (unlikely(ti_work & VTL0_WORK)) {
+               if (__xfer_to_guest_mode_work_pending()) {
                        preempt_enable();
-                       ret = mshv_do_pre_guest_mode_work(ti_work);
+                       ret = xfer_to_guest_mode_handle_work();
                        if (ret)
                                return ret;
                        preempt_disable();
-                       continue;
                }
 
                local_irq_save(irq_flags);
-- 
2.51.0.268.g9569e192d0-goog


Reply via email to