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