nVMX: Fix pick-up of uninjected NMIs
authorJan Kiszka <jan.kiszka@siemens.com>
Wed, 23 Oct 2013 16:42:15 +0000 (17:42 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 28 Oct 2013 12:14:24 +0000 (13:14 +0100)
__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 <jan.kiszka@siemens.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx.c

index feef3a1e45d38662b61210717cebf82fe05b4491..81ce3898b4483b7316808a9c19059bcdacbd622f 100644 (file)
@@ -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) {