[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250828000156.23389-8-seanjc@google.com>
Date: Wed, 27 Aug 2025 17:01:56 -0700
From: Sean Christopherson <seanjc@...gle.com>
To: Marc Zyngier <maz@...nel.org>, Oliver Upton <oliver.upton@...ux.dev>,
Catalin Marinas <catalin.marinas@....com>, Will Deacon <will@...nel.org>,
Tianrui Zhao <zhaotianrui@...ngson.cn>, Bibo Mao <maobibo@...ngson.cn>,
Huacai Chen <chenhuacai@...nel.org>, Anup Patel <anup@...infault.org>,
Paul Walmsley <paul.walmsley@...ive.com>, Palmer Dabbelt <palmer@...belt.com>,
Albert Ou <aou@...s.berkeley.edu>, Sean Christopherson <seanjc@...gle.com>,
Paolo Bonzini <pbonzini@...hat.com>, Thomas Gleixner <tglx@...utronix.de>, Ingo Molnar <mingo@...hat.com>,
Borislav Petkov <bp@...en8.de>, Dave Hansen <dave.hansen@...ux.intel.com>, x86@...nel.org,
"K. Y. Srinivasan" <kys@...rosoft.com>, Haiyang Zhang <haiyangz@...rosoft.com>, Wei Liu <wei.liu@...nel.org>,
Dexuan Cui <decui@...rosoft.com>, Peter Zijlstra <peterz@...radead.org>,
Andy Lutomirski <luto@...nel.org>, "Paul E. McKenney" <paulmck@...nel.org>,
Frederic Weisbecker <frederic@...nel.org>, Neeraj Upadhyay <neeraj.upadhyay@...nel.org>,
Joel Fernandes <joelagnelf@...dia.com>, Josh Triplett <josh@...htriplett.org>,
Boqun Feng <boqun.feng@...il.com>, Uladzislau Rezki <urezki@...il.com>
Cc: linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
kvmarm@...ts.linux.dev, kvm@...r.kernel.org, loongarch@...ts.linux.dev,
kvm-riscv@...ts.infradead.org, linux-riscv@...ts.infradead.org,
linux-hyperv@...r.kernel.org, rcu@...r.kernel.org,
Nuno Das Neves <nunodasneves@...ux.microsoft.com>, Mukesh R <mrathor@...ux.microsoft.com>
Subject: [PATCH v2 7/7] Drivers: hv: Use "entry virt" APIs to do work before
returning to lower VTL
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 <seanjc@...gle.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 <namjain@...ux.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
Powered by blists - more mailing lists