Message ID | 1405594981-31384-1-git-send-email-wanpeng.li@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Il 17/07/2014 13:03, Wanpeng Li ha scritto: > + /* > + * Fall back to old way to inject the interrupt since there > + * is no vAPIC-v for L2. > + */ > + if (vcpu->arch.exception.pending || > + vcpu->arch.nmi_injected || > + vcpu->arch.interrupt.pending) > + return; This is just if (kvm_event_needs_reinjection(vcpu)) return; but apart from this the patch is okay. I'll make the change and apply it, thanks. Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jul 17, 2014 at 01:31:06PM +0200, Paolo Bonzini wrote: >Il 17/07/2014 13:03, Wanpeng Li ha scritto: >>+ /* >>+ * Fall back to old way to inject the interrupt since there >>+ * is no vAPIC-v for L2. >>+ */ >>+ if (vcpu->arch.exception.pending || >>+ vcpu->arch.nmi_injected || >>+ vcpu->arch.interrupt.pending) >>+ return; > >This is just > > if (kvm_event_needs_reinjection(vcpu)) > return; > >but apart from this the patch is okay. I'll make the change and >apply it, thanks. > Thanks. Regards, Wanpeng Li >Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 021d84a..ad36646 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -7112,8 +7112,22 @@ static void vmx_hwapic_irr_update(struct kvm_vcpu *vcpu, int max_irr) { if (max_irr == -1) return; - - vmx_set_rvi(max_irr); + if (!is_guest_mode(vcpu)) { + vmx_set_rvi(max_irr); + } else if (is_guest_mode(vcpu) && !nested_exit_on_intr(vcpu)) { + /* + * Fall back to old way to inject the interrupt since there + * is no vAPIC-v for L2. + */ + if (vcpu->arch.exception.pending || + vcpu->arch.nmi_injected || + vcpu->arch.interrupt.pending) + return; + else if (vmx_interrupt_allowed(vcpu)) { + kvm_queue_interrupt(vcpu, max_irr, false); + vmx_inject_irq(vcpu); + } + } } static void vmx_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap)