mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
KVM: VMX: Call fred_entry_from_kvm() for IRQ/NMI handling
When FRED is enabled, call fred_entry_from_kvm() to handle IRQ/NMI in IRQ/NMI induced VM exits. Signed-off-by: Xin Li <xin3.li@intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Tested-by: Shan Kang <shan.kang@intel.com> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Link: https://lore.kernel.org/r/20231205105030.8698-33-xin3.li@intel.com
This commit is contained in:
parent
2e670358ec
commit
70d0fe5d09
|
|
@ -38,6 +38,7 @@
|
|||
#include <asm/desc.h>
|
||||
#include <asm/fpu/api.h>
|
||||
#include <asm/fpu/xstate.h>
|
||||
#include <asm/fred.h>
|
||||
#include <asm/idtentry.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq_remapping.h>
|
||||
|
|
@ -6960,14 +6961,16 @@ static void handle_external_interrupt_irqoff(struct kvm_vcpu *vcpu)
|
|||
{
|
||||
u32 intr_info = vmx_get_intr_info(vcpu);
|
||||
unsigned int vector = intr_info & INTR_INFO_VECTOR_MASK;
|
||||
gate_desc *desc = (gate_desc *)host_idt_base + vector;
|
||||
|
||||
if (KVM_BUG(!is_external_intr(intr_info), vcpu->kvm,
|
||||
"unexpected VM-Exit interrupt info: 0x%x", intr_info))
|
||||
return;
|
||||
|
||||
kvm_before_interrupt(vcpu, KVM_HANDLING_IRQ);
|
||||
vmx_do_interrupt_irqoff(gate_offset(desc));
|
||||
if (cpu_feature_enabled(X86_FEATURE_FRED))
|
||||
fred_entry_from_kvm(EVENT_TYPE_EXTINT, vector);
|
||||
else
|
||||
vmx_do_interrupt_irqoff(gate_offset((gate_desc *)host_idt_base + vector));
|
||||
kvm_after_interrupt(vcpu);
|
||||
|
||||
vcpu->arch.at_instruction_boundary = true;
|
||||
|
|
@ -7260,7 +7263,10 @@ static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
|
|||
if ((u16)vmx->exit_reason.basic == EXIT_REASON_EXCEPTION_NMI &&
|
||||
is_nmi(vmx_get_intr_info(vcpu))) {
|
||||
kvm_before_interrupt(vcpu, KVM_HANDLING_NMI);
|
||||
vmx_do_nmi_irqoff();
|
||||
if (cpu_feature_enabled(X86_FEATURE_FRED))
|
||||
fred_entry_from_kvm(EVENT_TYPE_NMI, NMI_VECTOR);
|
||||
else
|
||||
vmx_do_nmi_irqoff();
|
||||
kvm_after_interrupt(vcpu);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user