diff options
| -rw-r--r-- | arch/x86/kvm/x86.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index f6449334ec45..ef432f891d30 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
| @@ -5887,6 +5887,18 @@ static int inject_pending_event(struct kvm_vcpu *vcpu, bool req_int_win) | |||
| 5887 | kvm_x86_ops->set_nmi(vcpu); | 5887 | kvm_x86_ops->set_nmi(vcpu); |
| 5888 | } | 5888 | } |
| 5889 | } else if (kvm_cpu_has_injectable_intr(vcpu)) { | 5889 | } else if (kvm_cpu_has_injectable_intr(vcpu)) { |
| 5890 | /* | ||
| 5891 | * Because interrupts can be injected asynchronously, we are | ||
| 5892 | * calling check_nested_events again here to avoid a race condition. | ||
| 5893 | * See https://lkml.org/lkml/2014/7/2/60 for discussion about this | ||
| 5894 | * proposal and current concerns. Perhaps we should be setting | ||
| 5895 | * KVM_REQ_EVENT only on certain events and not unconditionally? | ||
| 5896 | */ | ||
| 5897 | if (is_guest_mode(vcpu) && kvm_x86_ops->check_nested_events) { | ||
| 5898 | r = kvm_x86_ops->check_nested_events(vcpu, req_int_win); | ||
| 5899 | if (r != 0) | ||
| 5900 | return r; | ||
| 5901 | } | ||
| 5890 | if (kvm_x86_ops->interrupt_allowed(vcpu)) { | 5902 | if (kvm_x86_ops->interrupt_allowed(vcpu)) { |
| 5891 | kvm_queue_interrupt(vcpu, kvm_cpu_get_interrupt(vcpu), | 5903 | kvm_queue_interrupt(vcpu, kvm_cpu_get_interrupt(vcpu), |
| 5892 | false); | 5904 | false); |
