Il 01/08/2014 10:12, Wanpeng Li ha scritto: > External interrupt will cause L1 vmexit w/ reason external interrupt when L2 is > running. Then L1 will pick up the interrupt through vmcs12 if L1 set the ack > interrupt bit. Commit 77b0f5d (KVM: nVMX: Ack and write vector info to intr_info > if L1 asks us to) get intr that belongs to L1 before load vmcs01 which is wrong, > especially this lead to the obvious L1 ack APICv behavior weired since APICv > is for L1 instead of L2. This patch fix it by ack intr after load vmcs01. > > Signed-off-by: Wanpeng Li <wanpeng.li@xxxxxxxxxxxxxxx> > --- > arch/x86/kvm/vmx.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index e618f34..b8122b3 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -8754,14 +8754,6 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason, > prepare_vmcs12(vcpu, vmcs12, exit_reason, exit_intr_info, > exit_qualification); > > - if ((exit_reason == EXIT_REASON_EXTERNAL_INTERRUPT) > - && nested_exit_intr_ack_set(vcpu)) { > - int irq = kvm_cpu_get_interrupt(vcpu); > - WARN_ON(irq < 0); > - vmcs12->vm_exit_intr_info = irq | > - INTR_INFO_VALID_MASK | INTR_TYPE_EXT_INTR; > - } > - > trace_kvm_nested_vmexit_inject(vmcs12->vm_exit_reason, > vmcs12->exit_qualification, > vmcs12->idt_vectoring_info_field, > @@ -8771,6 +8763,14 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason, > > vmx_load_vmcs01(vcpu); > > + if ((exit_reason == EXIT_REASON_EXTERNAL_INTERRUPT) > + && nested_exit_intr_ack_set(vcpu)) { > + int irq = kvm_cpu_get_interrupt(vcpu); > + WARN_ON(irq < 0); > + vmcs12->vm_exit_intr_info = irq | > + INTR_INFO_VALID_MASK | INTR_TYPE_EXT_INTR; > + } > + > vm_entry_controls_init(vmx, vmcs_read32(VM_ENTRY_CONTROLS)); > vm_exit_controls_init(vmx, vmcs_read32(VM_EXIT_CONTROLS)); > vmx_segment_cache_clear(vmx); > Reviewed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html