|
@@ -6095,12 +6095,10 @@ static int inject_pending_event(struct kvm_vcpu *vcpu, bool req_int_win)
|
|
|
}
|
|
|
|
|
|
/* try to inject new event if pending */
|
|
|
- if (vcpu->arch.nmi_pending) {
|
|
|
- if (kvm_x86_ops->nmi_allowed(vcpu)) {
|
|
|
- --vcpu->arch.nmi_pending;
|
|
|
- vcpu->arch.nmi_injected = true;
|
|
|
- kvm_x86_ops->set_nmi(vcpu);
|
|
|
- }
|
|
|
+ if (vcpu->arch.nmi_pending && kvm_x86_ops->nmi_allowed(vcpu)) {
|
|
|
+ --vcpu->arch.nmi_pending;
|
|
|
+ vcpu->arch.nmi_injected = true;
|
|
|
+ kvm_x86_ops->set_nmi(vcpu);
|
|
|
} else if (kvm_cpu_has_injectable_intr(vcpu)) {
|
|
|
/*
|
|
|
* Because interrupts can be injected asynchronously, we are
|
|
@@ -6569,10 +6567,12 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
|
|
|
if (inject_pending_event(vcpu, req_int_win) != 0)
|
|
|
req_immediate_exit = true;
|
|
|
/* enable NMI/IRQ window open exits if needed */
|
|
|
- else if (vcpu->arch.nmi_pending)
|
|
|
- kvm_x86_ops->enable_nmi_window(vcpu);
|
|
|
- else if (kvm_cpu_has_injectable_intr(vcpu) || req_int_win)
|
|
|
- kvm_x86_ops->enable_irq_window(vcpu);
|
|
|
+ else {
|
|
|
+ if (vcpu->arch.nmi_pending)
|
|
|
+ kvm_x86_ops->enable_nmi_window(vcpu);
|
|
|
+ if (kvm_cpu_has_injectable_intr(vcpu) || req_int_win)
|
|
|
+ kvm_x86_ops->enable_irq_window(vcpu);
|
|
|
+ }
|
|
|
|
|
|
if (kvm_lapic_enabled(vcpu)) {
|
|
|
update_cr8_intercept(vcpu);
|