--- /dev/null
+From: Suresh Siddha <suresh.b.siddha@intel.com>
+Subject: x64, x2apic/intr-remap: disable DMA-remapping if Interrupt-remapping is detected (temporary quirk)
+References: fate #303948 and fate #303984
+Patch-Mainline: queued for .28
+Commit-ID: 1cb11583a6c4ceda7426eb36f7bf0419da8dfbc2
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+Interrupt-remapping enables queued invalidation. And once queued invalidation
+is enabled, IOTLB invalidation also needs to use the queued invalidation
+mechanism and the register based IOTLB invalidation doesn't work.
+
+For now, Support for IOTLB invalidation using queued invalidation is
+missing. Meanwhile, disable DMA-remapping, if Interrupt-remapping
+support is detected.
+
+For the meanwhile, if someone wants to really enable DMA-remapping, they
+can use nox2apic, which will disable interrupt-remapping and as such
+doesn't enable queued invalidation.
+
+And given that none of the release platforms support intr-remapping yet,
+we should be ok for this temporary hack.
+
+Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
+Cc: akpm@linux-foundation.org
+Cc: arjan@linux.intel.com
+Cc: andi@firstfloor.org
+Cc: ebiederm@xmission.com
+Cc: jbarnes@virtuousgeek.org
+Cc: steiner@sgi.com
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+
+---
+ drivers/pci/dmar.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+Index: linux-2.6.26/drivers/pci/dmar.c
+===================================================================
+--- linux-2.6.26.orig/drivers/pci/dmar.c
++++ linux-2.6.26/drivers/pci/dmar.c
+@@ -459,6 +459,31 @@ void __init detect_intel_iommu(void)
+
+ #ifdef CONFIG_DMAR
+ {
++ struct acpi_table_dmar *dmar;
++ /*
++ * for now we will disable dma-remapping when interrupt
++ * remapping is enabled.
++ * When support for queued invalidation for IOTLB invalidation
++ * is added, we will not need this any more.
++ */
++ dmar = (struct acpi_table_dmar *) dmar_tbl;
++ if (ret && cpu_has_x2apic && dmar->flags & 0x1) {
++ printk(KERN_INFO
++ "Queued invalidation will be enabled to support "
++ "x2apic and Intr-remapping.\n");
++ printk(KERN_INFO
++ "Disabling IOMMU detection, because of missing "
++ "queued invalidation support for IOTLB "
++ "invalidation\n");
++ printk(KERN_INFO
++ "Use \"nox2apic\", if you want to use Intel "
++ " IOMMU for DMA-remapping and don't care about "
++ " x2apic support\n");
++
++ dmar_disabled = 1;
++ return;
++ }
++
+ if (ret && !no_iommu && !iommu_detected && !swiotlb &&
+ !dmar_disabled)
+ iommu_detected = 1;