From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brOg5-0004RW-Hl for qemu-devel@nongnu.org; Tue, 04 Oct 2016 08:18:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1brOfz-0005xi-AE for qemu-devel@nongnu.org; Tue, 04 Oct 2016 08:18:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60344) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brOfy-0005x4-Ut for qemu-devel@nongnu.org; Tue, 04 Oct 2016 08:18:27 -0400 Date: Tue, 4 Oct 2016 14:18:22 +0200 From: Igor Mammedov Message-ID: <20161004141822.03d5ec7b@nial.brq.redhat.com> In-Reply-To: <20160930161013.9832-8-rkrcmar@redhat.com> References: <20160930161013.9832-1-rkrcmar@redhat.com> <20160930161013.9832-8-rkrcmar@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v3 7/8] intel_iommu: keep buggy EIM enabled in 2.7 machine type List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Radim =?UTF-8?B?S3LEjW3DocWZ?= Cc: qemu-devel@nongnu.org, Peter Xu , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" On Fri, 30 Sep 2016 18:10:12 +0200 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 to > misbehave in non-obvious ways, and make it the default. >=20 > Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 > --- > v3: shorten the code [Peter] > --- > hw/i386/intel_iommu.c | 12 +++++++----- > hw/i386/pc_q35.c | 2 ++ > include/hw/i386/pc.h | 2 ++ > 3 files changed, 11 insertions(+), 5 deletions(-) >=20 > diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c > index efb018b85544..13a2ac5a8fb9 100644 > --- a/hw/i386/intel_iommu.c > +++ b/hw/i386/intel_iommu.c > @@ -2456,9 +2456,11 @@ static AddressSpace *vtd_host_dma_iommu(PCIBus *bu= s, void *opaque, int devfn) > return &vtd_as->as; > } > =20 > -static bool vtd_decide_config(IntelIOMMUState *s, Error **errp) > +static bool vtd_decide_config(IntelIOMMUState *s, PCMachineState *pcms, > + Error **errp) > { > X86IOMMUState *x86_iommu =3D X86_IOMMU_DEVICE(s); > + PCMachineClass *pcmc =3D PC_MACHINE_CLASS(MACHINE_GET_CLASS(pcms)); It's a bit backwards, for devices we usually add a property to affected dev= ice and use compat macros to do the job. As example look at commit 048a2e8869cb7e26013e40d860c9ebdf8e28c2ac x86: ioapic: boost default version to 0x20 > =20 > /* Currently Intel IOMMU IR only support "kernel-irqchip=3D{off|spli= t}" */ > if (x86_iommu->intr_supported && kvm_irqchip_in_kernel() && > @@ -2473,11 +2475,11 @@ static bool vtd_decide_config(IntelIOMMUState *s,= Error **errp) > } > =20 > if (s->intr_eim =3D=3D ON_OFF_AUTO_AUTO) { > - s->intr_eim =3D x86_iommu->intr_supported && kvm_irqchip_in_kern= el() ? > + s->intr_eim =3D (kvm_irqchip_in_kernel() || pcmc->buggy_intel_io= mmu_eim) > + && x86_iommu->intr_supported ? > ON_OFF_AUTO_ON : ON_OFF_AU= TO_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_ei= m) { > if (kvm_irqchip_in_kernel() && !kvm_enable_x2apic()) { > error_setg(errp, "eim=3Don requires support on the KVM side" > "(X2APIC_API, first shipped in v4.7)"); > @@ -2502,7 +2504,7 @@ static void vtd_realize(DeviceState *dev, Error **e= rrp) > VTD_DPRINTF(GENERAL, ""); > x86_iommu->type =3D TYPE_INTEL; > =20 > - if (!vtd_decide_config(s, errp)) { > + if (!vtd_decide_config(s, pcms, errp)) { > return; > } > =20 > 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"