From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46342) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXKDL-0003Hi-7H for qemu-devel@nongnu.org; Tue, 09 Aug 2016 23:29:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bXKDI-0007Gg-2J for qemu-devel@nongnu.org; Tue, 09 Aug 2016 23:29:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35570) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXKDH-0007Ga-Tw for qemu-devel@nongnu.org; Tue, 09 Aug 2016 23:29:52 -0400 Date: Wed, 10 Aug 2016 11:29:46 +0800 From: Peter Xu Message-ID: <20160810032946.GG4201@pxdev.xzpeter.org> References: <20160809150333.9991-1-rkrcmar@redhat.com> <20160809150333.9991-3-rkrcmar@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20160809150333.9991-3-rkrcmar@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 2/2] intel-iommu: restrict EIM to quirkless KVM List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Radim =?utf-8?B?S3LEjW3DocWZ?= Cc: qemu-devel@nongnu.org, Jan Kiszka , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" On Tue, Aug 09, 2016 at 05:03:33PM +0200, Radim Kr=C4=8Dm=C3=A1=C5=99 wro= te: > APIC in QEMU doesn't support x2APIC so exposing EIM is pointless and KV= M > has a quirk that needs to be disabled unless we want x2APIC message wit= h > destination 0xff to be misinterpreted as a broadcast. >=20 > Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 > --- > hw/i386/intel_iommu.c | 10 +++++++++- > target-i386/kvm-stub.c | 5 +++++ > target-i386/kvm.c | 12 ++++++++++++ > target-i386/kvm_i386.h | 1 + > 4 files changed, 27 insertions(+), 1 deletion(-) >=20 > diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c > index 28c31a2cdfa3..733751923233 100644 > --- a/hw/i386/intel_iommu.c > +++ b/hw/i386/intel_iommu.c > @@ -31,6 +31,7 @@ > #include "hw/i386/x86-iommu.h" > #include "hw/pci-host/q35.h" > #include "sysemu/kvm.h" > +#include "kvm_i386.h" > =20 > /*#define DEBUG_INTEL_IOMMU*/ > #ifdef DEBUG_INTEL_IOMMU > @@ -2364,7 +2365,14 @@ static void vtd_init(IntelIOMMUState *s) > s->ecap =3D VTD_ECAP_QI | VTD_ECAP_IRO; > =20 > if (x86_iommu->intr_supported) { > - s->ecap |=3D VTD_ECAP_IR | VTD_ECAP_EIM | VTD_ECAP_MHMV; > + s->ecap |=3D VTD_ECAP_IR | VTD_ECAP_MHMV; > + /* QEMU APIC does not support x2APIC and KVM does not work wel= l without > + * disabling a quirk. IOMMU is unmigratable so we uncondition= ally use > + * optional KVM features. > + */ > + if (kvm_irqchip_in_kernel() && kvm_disable_x2apic_broadcast_qu= irk()) { > + s->ecap |=3D VTD_ECAP_EIM; > + } Good to me if this patch is only going to disable x2apic when we failed to disable the x2apic broadcast quirk in KVM. Question: still not too clear about how KVM treats the case when x2apic and xapic are used in a single VM. E.g., if dest_id of an interrupt is 0xff from a peripheral device, how should I know this is a x2apic broadcast to 0-7 cpu in cluster 0, or an apic broadcast to all? Thanks, -- peterx