iommu/amd: Suppress IO_PAGE_FAULTs in kdump kernel
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>
This commit is contained in:
parent
ac3b708ad4
commit
54bd635704
|
@ -2078,7 +2078,8 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)
|
||||||
flags |= tmp;
|
flags |= tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
flags &= ~(0xffffUL);
|
|
||||||
|
flags &= ~(DTE_FLAG_SA | 0xffffULL);
|
||||||
flags |= domain->id;
|
flags |= domain->id;
|
||||||
|
|
||||||
amd_iommu_dev_table[devid].data[1] = flags;
|
amd_iommu_dev_table[devid].data[1] = flags;
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/iommu.h>
|
#include <linux/iommu.h>
|
||||||
#include <linux/kmemleak.h>
|
#include <linux/kmemleak.h>
|
||||||
|
#include <linux/crash_dump.h>
|
||||||
#include <asm/pci-direct.h>
|
#include <asm/pci-direct.h>
|
||||||
#include <asm/iommu.h>
|
#include <asm/iommu.h>
|
||||||
#include <asm/gart.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) {
|
for (devid = 0; devid <= amd_iommu_last_bdf; ++devid) {
|
||||||
set_dev_entry_bit(devid, DEV_ENTRY_VALID);
|
set_dev_entry_bit(devid, DEV_ENTRY_VALID);
|
||||||
set_dev_entry_bit(devid, DEV_ENTRY_TRANSLATION);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -322,6 +322,7 @@
|
||||||
#define IOMMU_PTE_IW (1ULL << 62)
|
#define IOMMU_PTE_IW (1ULL << 62)
|
||||||
|
|
||||||
#define DTE_FLAG_IOTLB (1ULL << 32)
|
#define DTE_FLAG_IOTLB (1ULL << 32)
|
||||||
|
#define DTE_FLAG_SA (1ULL << 34)
|
||||||
#define DTE_FLAG_GV (1ULL << 55)
|
#define DTE_FLAG_GV (1ULL << 55)
|
||||||
#define DTE_FLAG_MASK (0x3ffULL << 32)
|
#define DTE_FLAG_MASK (0x3ffULL << 32)
|
||||||
#define DTE_GLX_SHIFT (56)
|
#define DTE_GLX_SHIFT (56)
|
||||||
|
|
Loading…
Reference in New Issue