Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54bd6357 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

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: default avatarJoerg Roedel <jroedel@suse.de>
parent ac3b708a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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;
+9 −0
Original line number Diff line number Diff line
@@ -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);
	}
}

+1 −0
Original line number Diff line number Diff line
@@ -322,6 +322,7 @@
#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)