nVMX: Fix pick-up of uninjected NMIs
PATCH 1/1 nVMX: Fix pick-up of uninjected NMIs
__vmx_complete_interrupts stored uninjected NMIs in arch.nmi_injected, not arch.nmi_pending. So we actually need to check the former field in vmcs12_save_pending_event. This fixes the eventinj unit test when run in nested KVM.
Signed-off-by Jan Kiszka <[email protected]>
--- arch/x86/kvm/vmx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kvm/vmx.c +1 -1
@@ -8078,7 +8078,7 @@ static void vmcs12_save_pending_event(struct kvm_vcpu *vcpu, } vmcs12->idt_vectoring_info_field = idt_vectoring; - }else if (vcpu->arch.nmi_pending) { + }else if (vcpu->arch.nmi_injected) { vmcs12->idt_vectoring_info_field =INTR_TYPE_NMI_INTR |INTR_INFO_VALID_MASK |NMI_VECTOR ; }else if (vcpu->arch.interrupt.pending) {
Signature · 1 line
1.8.1.1.298.ge7eed54
Il 23/10/2013 18:42, Jan Kiszka ha scritto:
Quoted 16 lines
__vmx_complete_interruptsstored uninjected NMIs in arch.nmi_injected, not arch.nmi_pending. So we actually need to check the former field invmcs12_save_pending_event. This fixes the eventinj unit test when run in nested KVM.Signed-off-by Jan Kiszka <[email protected]>--- arch/x86/kvm/vmx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/x86/kvm/vmx.c +0
-0
arch/x86/kvm/vmx.c static void vmcs12_save_pending_event(struct kvm_vcpu *vcpu, · line 8084
Quoted 8 lines
arch/x86/kvm/vmx.c +1
-1@@ -8078,7 +8078,7 @@ static void vmcs12_save_pending_event(struct kvm_vcpu *vcpu, } vmcs12->idt_vectoring_info_field = idt_vectoring; - }else if (vcpu->arch.nmi_pending) { + }else if (vcpu->arch.nmi_injected) { vmcs12->idt_vectoring_info_field =INTR_TYPE_NMI_INTR |INTR_INFO_VALID_MASK |NMI_VECTOR ; }else if (vcpu->arch.interrupt.pending) {
Applied to kvm.git queue, thanks.
Paolo