From: Sean Christopherson <seanjc@google.com>
To: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Xiaoyao Li <xiaoyao.li@intel.com>,
Kai Huang <kai.huang@intel.com>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
Binbin Wu <binbin.wu@linux.intel.com>,
Yan Zhao <yan.y.zhao@intel.com>
Subject: [PATCH v3 3/8] KVM: VMX: Move the shared NMI handler/trampoline to common code
Date: Thu, 3 Sep 2026 18:03:48 -0700 [thread overview]
Message-ID: <20260904010353.3175819-4-seanjc@google.com> (raw)
In-Reply-To: <20260904010353.3175819-1-seanjc@google.com>
Move vmx_handle_nmi() to main.c to capture that it's a common handler and
to allow guarding against incorrectly using to_vmx().
Opportunistically use a "vt" prefix instead of "vmx" to communicate that
it's a shared handler.
No functional change intended.
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Tested-by: Kai Huang <kai.huang@intel.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
arch/x86/kvm/vmx/common.h | 2 +-
arch/x86/kvm/vmx/main.c | 11 +++++++++++
arch/x86/kvm/vmx/tdx.c | 2 +-
arch/x86/kvm/vmx/vmx.c | 13 +------------
4 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/arch/x86/kvm/vmx/common.h b/arch/x86/kvm/vmx/common.h
index 88f637c81353..4b1d46eafd0f 100644
--- a/arch/x86/kvm/vmx/common.h
+++ b/arch/x86/kvm/vmx/common.h
@@ -189,6 +189,6 @@ static inline void __vmx_deliver_posted_interrupt(struct kvm_vcpu *vcpu,
kvm_vcpu_trigger_posted_interrupt(vcpu, POSTED_INTR_VECTOR);
}
-noinstr void vmx_handle_nmi(struct kvm_vcpu *vcpu);
+noinstr void vt_handle_nmi(struct kvm_vcpu *vcpu);
#endif /* __KVM_X86_VMX_COMMON_H */
diff --git a/arch/x86/kvm/vmx/main.c b/arch/x86/kvm/vmx/main.c
index 9614f43e7987..b1069a8e30a7 100644
--- a/arch/x86/kvm/vmx/main.c
+++ b/arch/x86/kvm/vmx/main.c
@@ -947,6 +947,17 @@ static void vt_handle_exit_irqoff(struct kvm_vcpu *vcpu)
}
}
+noinstr void vt_handle_nmi(struct kvm_vcpu *vcpu)
+{
+ if ((u16)vmx_get_exit_reason(vcpu).basic != EXIT_REASON_EXCEPTION_NMI ||
+ !is_nmi(vmx_get_intr_info(vcpu)))
+ return;
+
+ kvm_before_interrupt(vcpu, KVM_HANDLING_NMI);
+ x86_entry_from_kvm(EVENT_TYPE_NMI, NMI_VECTOR);
+ kvm_after_interrupt(vcpu);
+}
+
#define VMX_REQUIRED_APICV_INHIBITS \
(BIT(APICV_INHIBIT_REASON_DISABLED) | \
BIT(APICV_INHIBIT_REASON_ABSENT) | \
diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c
index b272c20586a7..46b0e798f8b9 100644
--- a/arch/x86/kvm/vmx/tdx.c
+++ b/arch/x86/kvm/vmx/tdx.c
@@ -974,7 +974,7 @@ static noinstr void tdx_vcpu_enter_exit(struct kvm_vcpu *vcpu)
tdx->exit_gpa = tdx->vp_enter_args.r8;
vt->exit_intr_info = tdx->vp_enter_args.r9;
- vmx_handle_nmi(vcpu);
+ vt_handle_nmi(vcpu);
guest_state_exit_irqoff();
}
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index adf2bc13bed2..a06dd2d77f10 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -7363,17 +7363,6 @@ static fastpath_t vmx_exit_handlers_fastpath(struct kvm_vcpu *vcpu,
}
}
-noinstr void vmx_handle_nmi(struct kvm_vcpu *vcpu)
-{
- if ((u16)vmx_get_exit_reason(vcpu).basic != EXIT_REASON_EXCEPTION_NMI ||
- !is_nmi(vmx_get_intr_info(vcpu)))
- return;
-
- kvm_before_interrupt(vcpu, KVM_HANDLING_NMI);
- x86_entry_from_kvm(EVENT_TYPE_NMI, NMI_VECTOR);
- kvm_after_interrupt(vcpu);
-}
-
static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
unsigned int flags)
{
@@ -7406,7 +7395,7 @@ static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
if (likely(!vmx_get_exit_reason(vcpu).failed_vmentry))
vmx->idt_vectoring_info = vmcs_read32(IDT_VECTORING_INFO_FIELD);
- vmx_handle_nmi(vcpu);
+ vt_handle_nmi(vcpu);
out:
guest_state_exit_irqoff();
--
2.55.0.979.g7e5102b832-goog
next prev parent reply other threads:[~2026-09-04 1:03 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 1:03 [PATCH v3 0/8] KVM: VMX: Harden against interpreting TDX vCPU as vcpu_vmx Sean Christopherson
2026-09-04 1:03 ` [PATCH v3 1/8] KVM: VMX: Disallow using to_vmx() in common VT code Sean Christopherson
2026-09-04 2:19 ` Binbin Wu
2026-09-04 1:03 ` [PATCH v3 2/8] KVM: VMX: Move the shared "IRQs off" exit handler(s) to common code Sean Christopherson
2026-09-04 2:28 ` Binbin Wu
2026-09-04 1:03 ` Sean Christopherson [this message]
2026-09-04 2:30 ` [PATCH v3 3/8] KVM: VMX: Move the shared NMI handler/trampoline " Binbin Wu
2026-09-04 1:03 ` [PATCH v3 4/8] KVM: VMX: Rename posted interrupt prefixes from "vmx" to "vt" Sean Christopherson
2026-09-04 2:41 ` Binbin Wu
2026-09-04 1:03 ` [PATCH v3 5/8] KVM: VMX: Rename EPT violation handler prefix " Sean Christopherson
2026-09-04 2:42 ` Binbin Wu
2026-09-04 1:03 ` [PATCH v3 6/8] KVM: VMX: Use dummy pseudo-overlay struct for to_vt() and vt_to_vcpu() Sean Christopherson
2026-09-04 2:54 ` Binbin Wu
2026-09-04 1:03 ` [PATCH v3 7/8] KVM: VMX: Move common VT getters/converters to common.h Sean Christopherson
2026-09-04 2:57 ` Binbin Wu
2026-09-04 1:03 ` [PATCH v3 8/8] KVM: VMX: Rename common exit info getters prefixes from "vmx" to "vt" Sean Christopherson
2026-09-04 3:00 ` Binbin Wu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260904010353.3175819-4-seanjc@google.com \
--to=seanjc@google.com \
--cc=binbin.wu@linux.intel.com \
--cc=kai.huang@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=rick.p.edgecombe@intel.com \
--cc=xiaoyao.li@intel.com \
--cc=yan.y.zhao@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.