From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH v3 3/4] x86, apicv: add virtual interrupt delivery support Date: Wed, 5 Dec 2012 13:14:38 +0200 Message-ID: <20121205111438.GN19514@redhat.com> References: <1354518064-3066-1-git-send-email-yang.z.zhang@intel.com> <1354518064-3066-4-git-send-email-yang.z.zhang@intel.com> <20121205020016.GA32458@amt.cnet> Mime-Version: 1.0 Content-Type: text/plain; charset=cp1255 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Marcelo Tosatti , "kvm@vger.kernel.org" , "Tian, Kevin" To: "Zhang, Yang Z" Return-path: Received: from mx1.redhat.com ([209.132.183.28]:22633 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752295Ab2LELOk convert rfc822-to-8bit (ORCPT ); Wed, 5 Dec 2012 06:14:40 -0500 Content-Disposition: inline In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On Wed, Dec 05, 2012 at 03:43:41AM +0000, Zhang, Yang Z wrote: > >> @@ -5657,12 +5673,20 @@ static int vcpu_enter_guest(struct kvm_vcp= u > > *vcpu) > >> } > >> =20 > >> if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win) { > >> + /* update archtecture specific hints for APIC > >> + * virtual interrupt delivery */ > >> + if (kvm_x86_ops->update_irq) > >> + kvm_x86_ops->update_irq(vcpu); > >> + > >> inject_pending_event(vcpu); > >> =20 > >> /* enable NMI/IRQ window open exits if needed */ > >> if (vcpu->arch.nmi_pending) > >> kvm_x86_ops->enable_nmi_window(vcpu); > >> - else if (kvm_cpu_has_interrupt(vcpu) || req_int_win) > >> + else if (kvm_apic_vid_enabled(vcpu)) { > >> + if (kvm_cpu_has_extint(vcpu)) > >> + kvm_x86_ops->enable_irq_window(vcpu); > >=20 > > If RVI is non-zero, then interrupt window should not be enabled, > > accordingly to 29.2.2: > >=20 > > "If a virtual interrupt has been recognized (see Section 29.2.1), i= t will > > be delivered at an instruction boundary when the following conditio= ns all > > hold: (1) RFLAGS.IF =3D 1; (2) there is no blocking by STI; (3) the= re is no > > blocking by MOV SS or by POP SS; and (4) the =93interrupt-window ex= iting=94 > > VM-execution control is 0." > Right. Must check RVI here. >=20 Why? We request interrupt window here because there is ExtINT interrupt pending. ExtINT interrupt has a precedence over APIC interrupts (our current code is incorrect!), so we want vmexit as soon as interrupts ar= e allowed to inject ExtINT and we do not want virtual interrupt to be delivered. I think the (4) there is exactly for this situation. -- Gleb.