From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40641) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brluy-0002MZ-M5 for qemu-devel@nongnu.org; Wed, 05 Oct 2016 09:07:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1brluw-0004hs-K4 for qemu-devel@nongnu.org; Wed, 05 Oct 2016 09:07:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54984) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brluw-0004hn-Ag for qemu-devel@nongnu.org; Wed, 05 Oct 2016 09:07:26 -0400 From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= Date: Wed, 5 Oct 2016 15:06:56 +0200 Message-Id: <20161005130657.3399-8-rkrcmar@redhat.com> In-Reply-To: <20161005130657.3399-1-rkrcmar@redhat.com> References: <20161005130657.3399-1-rkrcmar@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v4 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: qemu-devel@nongnu.org Cc: Peter Xu , Igor Mammedov , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" 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 for old machine types. A user can enable the buggy mode it with "buggy_eim=3Don", which is weird= , but I don't know how to add a private property. Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 --- v4: * use a device property [Igor] * clarify the last sentence of the commit message v3: shorten the code [Peter] --- hw/i386/intel_iommu.c | 7 ++++--- include/hw/compat.h | 4 ++++ include/hw/i386/intel_iommu.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index efb018b85544..fe257e8357b4 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -2015,6 +2015,7 @@ static Property vtd_properties[] =3D { DEFINE_PROP_UINT32("version", IntelIOMMUState, version, 0), DEFINE_PROP_ON_OFF_AUTO("eim", IntelIOMMUState, intr_eim, ON_OFF_AUTO_AUTO), + DEFINE_PROP_BOOL("buggy_eim", IntelIOMMUState, buggy_eim, false), DEFINE_PROP_END_OF_LIST(), }; =20 @@ -2473,11 +2474,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() || s->buggy_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 && !s->buggy_eim) { 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)"); diff --git a/include/hw/compat.h b/include/hw/compat.h index 46412b229a70..43b50065e082 100644 --- a/include/hw/compat.h +++ b/include/hw/compat.h @@ -10,6 +10,10 @@ .driver =3D "ioapic",\ .property =3D "version",\ .value =3D "0x11",\ + },{\ + .driver =3D "intel-iommu",\ + .property =3D "buggy_eim",\ + .value =3D "true",\ }, =20 #define HW_COMPAT_2_6 \ diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.= h index b5ac60927b1f..1989c1eec10a 100644 --- a/include/hw/i386/intel_iommu.h +++ b/include/hw/i386/intel_iommu.h @@ -290,6 +290,7 @@ struct IntelIOMMUState { uint32_t intr_size; /* Number of IR table entries */ bool intr_eime; /* Extended interrupt mode enabled *= / OnOffAuto intr_eim; /* Toggle for EIM cabability */ + bool buggy_eim; /* Force buggy EIM unless eim=3Doff = */ }; =20 /* Find the VTD Address space associated with the given bus pointer, --=20 2.10.0