On 8/27/2025 5:01 PM, Sean Christopherson wrote: > Use the kernel's common "entry virt" APIs to handle pending work prior to > (re)entering guest mode, now that the virt APIs don't have a superfluous > dependency on KVM. > > No functional change intended. > > Signed-off-by: Sean Christopherson <sea...@google.com> > --- > drivers/hv/Kconfig | 1 + > drivers/hv/mshv_root_main.c | 32 ++++++-------------------------- > 2 files changed, 7 insertions(+), 26 deletions(-) > > diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig > index 2e8df09db599..894037afcbf9 100644 > --- a/drivers/hv/Kconfig > +++ b/drivers/hv/Kconfig > @@ -66,6 +66,7 @@ config MSHV_ROOT > # no particular order, making it impossible to reassemble larger pages > depends on PAGE_SIZE_4KB > select EVENTFD > + select VIRT_XFER_TO_GUEST_WORK > default n > help > Select this option to enable support for booting and running as root > diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c > index 0d849f09160a..7c83f656e071 100644 > --- a/drivers/hv/mshv_root_main.c > +++ b/drivers/hv/mshv_root_main.c > @@ -8,6 +8,7 @@ > * Authors: Microsoft Linux virtualization team > */ > > +#include <linux/entry-virt.h> > #include <linux/kernel.h> > #include <linux/module.h> > #include <linux/fs.h> > @@ -481,29 +482,6 @@ mshv_vp_wait_for_hv_kick(struct mshv_vp *vp) > return 0; > } > > -static int mshv_pre_guest_mode_work(struct mshv_vp *vp) > -{ > - const ulong work_flags = _TIF_NOTIFY_SIGNAL | _TIF_SIGPENDING | > - _TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | > - _TIF_NOTIFY_RESUME; > - ulong th_flags; > - > - th_flags = read_thread_flags(); > - while (th_flags & work_flags) { > - int ret; > - > - /* nb: following will call schedule */ > - ret = mshv_do_pre_guest_mode_work(th_flags); > - > - if (ret) > - return ret; > - > - th_flags = read_thread_flags(); > - } > - > - return 0; > -} > - > /* Must be called with interrupts enabled */ > static long mshv_run_vp_with_root_scheduler(struct mshv_vp *vp) > { > @@ -524,9 +502,11 @@ static long mshv_run_vp_with_root_scheduler(struct > mshv_vp *vp) > u32 flags = 0; > struct hv_output_dispatch_vp output; > > - ret = mshv_pre_guest_mode_work(vp); > - if (ret) > - break; > + if (__xfer_to_guest_mode_work_pending()) { > + ret = xfer_to_guest_mode_handle_work(); > + if (ret) > + break; > + } > > if (vp->run.flags.intercept_suspend) > flags |= HV_DISPATCH_VP_FLAG_CLEAR_INTERCEPT_SUSPEND;
Also tested mshv_root with 1-6 applied, looks good to me. Possibly Naman, Saurabh, or Roman can test the mshv_vtl patches, I can't do it unfortunately. Tested-by: Nuno Das Neves <nunodasne...@linux.microsoft.com> Reviewed-by: Nuno Das Neves <nunodasne...@linux.microsoft.com>