From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59347) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bpbF3-0005vg-39 for qemu-devel@nongnu.org; Thu, 29 Sep 2016 09:19:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bpbEz-0006wT-2R for qemu-devel@nongnu.org; Thu, 29 Sep 2016 09:19:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42962) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bpbEy-0006vx-Oo for qemu-devel@nongnu.org; Thu, 29 Sep 2016 09:19:08 -0400 References: <20160929112329.2408-1-rkrcmar@redhat.com> <20160929112329.2408-8-rkrcmar@redhat.com> From: Paolo Bonzini Message-ID: <5d7ea26b-1d0a-0cf5-8361-45efca630606@redhat.com> Date: Thu, 29 Sep 2016 15:19:03 +0200 MIME-Version: 1.0 In-Reply-To: <20160929112329.2408-8-rkrcmar@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 7/7] intel-iommu: keep buggy EIM enabled in 2.7 machine type List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , qemu-devel@nongnu.org Cc: Peter Xu , Igor Mammedov , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" On 29/09/2016 13:23, Radim Kr=C4=8Dm=C3=A1=C5=99 wrote: > QEMU 2.7 allowed EIM even in configurations that were forbidden in the > last patch because they were not working, like old KVM or userspace > APIC. In order to keep backward compatibility, we again allow guests t= o > misbehave in non-obvious ways, and make it the default. >=20 > Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 Ugh, I misremembered that VTD_ECAP_EIM was not set in 2.7. :( Perhaps it's better to drop this patch... Paolo > --- > hw/i386/intel_iommu.c | 6 +++++- > hw/i386/pc_q35.c | 2 ++ > include/hw/i386/pc.h | 2 ++ > 3 files changed, 9 insertions(+), 1 deletion(-) >=20 > diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c > index b1afe5b133e0..d6657a361ff9 100644 > --- a/hw/i386/intel_iommu.c > +++ b/hw/i386/intel_iommu.c > @@ -2458,6 +2458,7 @@ static AddressSpace *vtd_host_dma_iommu(PCIBus *b= us, void *opaque, int devfn) > static void vtd_realize(DeviceState *dev, Error **errp) > { > PCMachineState *pcms =3D PC_MACHINE(qdev_get_machine()); > + PCMachineClass *pcmc =3D PC_MACHINE_CLASS(MACHINE_GET_CLASS(pcms))= ; > PCIBus *bus =3D pcms->bus; > IntelIOMMUState *s =3D INTEL_IOMMU_DEVICE(dev); > X86IOMMUState *x86_iommu =3D X86_IOMMU_DEVICE(dev); > @@ -2481,11 +2482,14 @@ static void vtd_realize(DeviceState *dev, Error= **errp) > if (s->intr_eim =3D=3D ON_OFF_AUTO_AUTO && !x86_iommu->intr_suppor= ted) { > s->intr_eim =3D ON_OFF_AUTO_OFF; > } > + if (s->intr_eim =3D=3D ON_OFF_AUTO_AUTO && pcmc->buggy_intel_iommu= _eim) { > + s->intr_eim =3D ON_OFF_AUTO_ON; > + } > if (s->intr_eim =3D=3D ON_OFF_AUTO_AUTO) { > s->intr_eim =3D kvm_irqchip_in_kernel() ? ON_OFF_AUTO_ON > : ON_OFF_AUTO_OFF; > } > - if (s->intr_eim =3D=3D ON_OFF_AUTO_ON) { > + if (s->intr_eim =3D=3D ON_OFF_AUTO_ON && !pcmc->buggy_intel_iommu_= eim) { > if (kvm_irqchip_in_kernel() && !kvm_enable_x2apic()) { > error_report("intel-iommu,eim=3Don requires support on the= KVM side " > "(X2APIC_API, first shipped in v4.7)."); > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c > index 0b214f24c977..97f419fbf4dd 100644 > --- a/hw/i386/pc_q35.c > +++ b/hw/i386/pc_q35.c > @@ -304,8 +304,10 @@ DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL, > =20 > static void pc_q35_2_7_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc =3D PC_MACHINE_CLASS(m); > pc_q35_2_8_machine_options(m); > m->alias =3D NULL; > + pcmc->buggy_intel_iommu_eim =3D true; > SET_MACHINE_COMPAT(m, PC_COMPAT_2_7); > } > =20 > diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h > index 47bdf10cfd9b..4bd435f8fa5c 100644 > --- a/include/hw/i386/pc.h > +++ b/include/hw/i386/pc.h > @@ -143,6 +143,8 @@ struct PCMachineClass { > bool save_tsc_khz; > /* generate legacy CPU hotplug AML */ > bool legacy_cpu_hotplug; > + /* enable buggy Intel-IOMMU EIM by default */ > + bool buggy_intel_iommu_eim; > }; > =20 > #define TYPE_PC_MACHINE "generic-pc-machine" >=20