From mboxrd@z Thu Jan 1 00:00:00 1970 From: Radim =?utf-8?B?S3LEjW3DocWZ?= Subject: Re: [PATCH 1/6] KVM: vmx: clear pending interrupts on KVM_SET_LAPIC Date: Tue, 7 Feb 2017 18:42:36 +0100 Message-ID: <20170207174236.GA31091@potion> References: <1482164232-130035-1-git-send-email-pbonzini@redhat.com> <1482164232-130035-2-git-send-email-pbonzini@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org To: Paolo Bonzini Return-path: Content-Disposition: inline In-Reply-To: <1482164232-130035-2-git-send-email-pbonzini@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org 2016-12-19 17:17+0100, Paolo Bonzini: > Pending interrupts might be in the PI descriptor when the > LAPIC is restored from an external state; we do not want > them to be injected. > > Signed-off-by: Paolo Bonzini > --- Reviewed-by: Radim Krčmář > arch/x86/kvm/lapic.c | 3 +-- > arch/x86/kvm/vmx.c | 9 +++++++++ > 2 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index 4dc02482faf7..5fa546e27b7e 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -2185,8 +2185,7 @@ int kvm_apic_set_state(struct kvm_vcpu *vcpu, struct kvm_lapic_state *s) > 1 : count_vectors(apic->regs + APIC_ISR); > apic->highest_isr_cache = -1; > if (vcpu->arch.apicv_active) { > - if (kvm_x86_ops->apicv_post_state_restore) > - kvm_x86_ops->apicv_post_state_restore(vcpu); > + kvm_x86_ops->apicv_post_state_restore(vcpu); > kvm_x86_ops->hwapic_irr_update(vcpu, > apic_find_highest_irr(apic)); > kvm_x86_ops->hwapic_isr_update(vcpu, > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index 1ba7aaf6ae7f..661956caf162 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -8761,6 +8761,14 @@ static void vmx_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap) > vmcs_write64(EOI_EXIT_BITMAP3, eoi_exit_bitmap[3]); > } > > +static void vmx_apicv_post_state_restore(struct kvm_vcpu *vcpu) > +{ > + struct vcpu_vmx *vmx = to_vmx(vcpu); > + > + pi_clear_on(&vmx->pi_desc); > + memset(vmx->pi_desc.pir, 0, sizeof(vmx->pi_desc.pir)); > +} > + > static void vmx_complete_atomic_exit(struct vcpu_vmx *vmx) > { > u32 exit_intr_info; > @@ -11590,6 +11598,7 @@ static void vmx_setup_mce(struct kvm_vcpu *vcpu) > .get_enable_apicv = vmx_get_enable_apicv, > .refresh_apicv_exec_ctrl = vmx_refresh_apicv_exec_ctrl, > .load_eoi_exitmap = vmx_load_eoi_exitmap, > + .apicv_post_state_restore = vmx_apicv_post_state_restore, > .hwapic_irr_update = vmx_hwapic_irr_update, > .hwapic_isr_update = vmx_hwapic_isr_update, > .sync_pir_to_irr = vmx_sync_pir_to_irr, > -- > 1.8.3.1 > > > -- > 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