|
@@ -3647,13 +3647,21 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
local_irq_disable();
|
|
|
|
|
|
- stgi();
|
|
|
-
|
|
|
vcpu->arch.cr2 = svm->vmcb->save.cr2;
|
|
|
vcpu->arch.regs[VCPU_REGS_RAX] = svm->vmcb->save.rax;
|
|
|
vcpu->arch.regs[VCPU_REGS_RSP] = svm->vmcb->save.rsp;
|
|
|
vcpu->arch.regs[VCPU_REGS_RIP] = svm->vmcb->save.rip;
|
|
|
|
|
|
+ if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI))
|
|
|
+ kvm_before_handle_nmi(&svm->vcpu);
|
|
|
+
|
|
|
+ stgi();
|
|
|
+
|
|
|
+ /* Any pending NMI will happen here */
|
|
|
+
|
|
|
+ if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI))
|
|
|
+ kvm_after_handle_nmi(&svm->vcpu);
|
|
|
+
|
|
|
sync_cr8_to_lapic(vcpu);
|
|
|
|
|
|
svm->next_rip = 0;
|