From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [PATCH 5/9] KVM: x86: unify handling of interrupt window Date: Thu, 6 Aug 2015 13:55:23 +0200 Message-ID: <55C34B2B.2050807@redhat.com> References: <1438788228-34856-1-git-send-email-pbonzini@redhat.com> <1438788228-34856-6-git-send-email-pbonzini@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Cc: Steve Rutherford , "rkrcmar@redhat.com" To: "Wu, Feng" , "linux-kernel@vger.kernel.org" , "kvm@vger.kernel.org" Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On 06/08/2015 08:50, Wu, Feng wrote: > Is it possible to adjust the code here and remove the later checking in x86.c? > In that case, we can avoid calling dm_request_for_irq_injection(vcpu) for > VM exit. No, see the dm_request_for_irq_injection() changes in patch 9. In that patch, you can get a IRQ window open vmexit under broader conditions (e.g. writing to the local APIC's LVT0 register). dm_request_for_irq_injection() is called just once, so it is inlined. After patch 9, it boils down to simply if (!vcpu->run->request_interrupt_window) return false; in the common case of in-kernel irqchip. So it costs just one memory access and a well-predicted branch. Paolo > Basically dm_request_for_irq_injection() did the following checks: > > - The same as in handle_interrupt_window() below: > > if (!irqchip_in_kernel(vcpu->kvm) && > vcpu->run->request_interrupt_window && > !kvm_cpu_has_interrupt(vcpu)) > > - kvm_arch_interrupt_allowed(vcpu), in which, most of the conditions > are guaranteed by interrupt window exits, the only one I am not sure > how to handle is ' to_vmx(vcpu)->nested.nested_run_pending'.