]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.25/patches.arch/x2APIC_PATCH_18_of_41_1cb11583a6c4ceda7426eb36f7bf0419da8dfbc2
Updated xen patches taken from suse.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.arch / x2APIC_PATCH_18_of_41_1cb11583a6c4ceda7426eb36f7bf0419da8dfbc2
diff --git a/src/patches/suse-2.6.27.25/patches.arch/x2APIC_PATCH_18_of_41_1cb11583a6c4ceda7426eb36f7bf0419da8dfbc2 b/src/patches/suse-2.6.27.25/patches.arch/x2APIC_PATCH_18_of_41_1cb11583a6c4ceda7426eb36f7bf0419da8dfbc2
new file mode 100644 (file)
index 0000000..d424d14
--- /dev/null
@@ -0,0 +1,72 @@
+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;