]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
iommu/amd: Suppress IO_PAGE_FAULTs in kdump kernel
authorJoerg Roedel <jroedel@suse.de>
Thu, 15 Jun 2017 08:36:22 +0000 (10:36 +0200)
committerJoerg Roedel <jroedel@suse.de>
Fri, 16 Jun 2017 08:21:05 +0000 (10:21 +0200)
When booting into a kdump kernel, suppress IO_PAGE_FAULTs by
default for all devices. But allow the faults again when a
domain is assigned to a device.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd_iommu.c
drivers/iommu/amd_iommu_init.c
drivers/iommu/amd_iommu_types.h

index 6498f5baa7ea54cc057f0704e5b354efa7123b02..95ee360a519910b2dd86c31ac39618bc96a2ea38 100644 (file)
@@ -2078,7 +2078,8 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)
                flags    |= tmp;
        }
 
-       flags &= ~(0xffffUL);
+
+       flags &= ~(DTE_FLAG_SA | 0xffffULL);
        flags |= domain->id;
 
        amd_iommu_dev_table[devid].data[1]  = flags;
index 3fa7e3b35507d1f14406c16635a43188f1ec0bfd..cf7896550e758535aa1d6579feef316d57b734c7 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/export.h>
 #include <linux/iommu.h>
 #include <linux/kmemleak.h>
+#include <linux/crash_dump.h>
 #include <asm/pci-direct.h>
 #include <asm/iommu.h>
 #include <asm/gart.h>
@@ -1900,6 +1901,14 @@ static void init_device_table_dma(void)
        for (devid = 0; devid <= amd_iommu_last_bdf; ++devid) {
                set_dev_entry_bit(devid, DEV_ENTRY_VALID);
                set_dev_entry_bit(devid, DEV_ENTRY_TRANSLATION);
+               /*
+                * In kdump kernels in-flight DMA from the old kernel might
+                * cause IO_PAGE_FAULTs. There are no reports that a kdump
+                * actually failed because of that, so just disable fault
+                * reporting in the hardware to get rid of the messages
+                */
+               if (is_kdump_kernel())
+                       set_dev_entry_bit(devid, DEV_ENTRY_NO_PAGE_FAULT);
        }
 }
 
index 6960d7db2fabebcb792b4b03c8f2ce3d0b1485fb..294a409e283b7ae4b52c59350756983711bba9d1 100644 (file)
 #define IOMMU_PTE_IW (1ULL << 62)
 
 #define DTE_FLAG_IOTLB (1ULL << 32)
+#define DTE_FLAG_SA    (1ULL << 34)
 #define DTE_FLAG_GV    (1ULL << 55)
 #define DTE_FLAG_MASK  (0x3ffULL << 32)
 #define DTE_GLX_SHIFT  (56)