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

Commit a87f4918 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/vt-d: Don't do early domain assignment if kdump kernel



When we copied over context tables from an old kernel, we
need to defer assignment of devices to domains until the
device driver takes over. So skip this part of
initialization when we copied over translation tables from
the old kernel.

Tested-by: default avatarZhenHua Li <zhen-hual@hp.com>
Tested-by: default avatarBaoquan He <bhe@redhat.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 86080ccc
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -3001,6 +3001,7 @@ static int __init init_dmars(void)
{
	struct dmar_drhd_unit *drhd;
	struct dmar_rmrr_unit *rmrr;
	bool copied_tables = false;
	struct device *dev;
	struct intel_iommu *iommu;
	int i, ret;
@@ -3091,6 +3092,7 @@ static int __init init_dmars(void)
			} else {
				pr_info("Copied translation tables from previous kernel for %s\n",
					iommu->name);
				copied_tables = true;
			}
		}

@@ -3118,6 +3120,15 @@ static int __init init_dmars(void)

	check_tylersburg_isoch();

	/*
	 * If we copied translations from a previous kernel in the kdump
	 * case, we can not assign the devices to domains now, as that
	 * would eliminate the old mappings. So skip this part and defer
	 * the assignment to device driver initialization time.
	 */
	if (copied_tables)
		goto domains_done;

	/*
	 * If pass through is not set or not enabled, setup context entries for
	 * identity mappings for rmrr, gfx, and isa and may fall back to static
@@ -3157,6 +3168,8 @@ static int __init init_dmars(void)

	iommu_prepare_isa();

domains_done:

	/*
	 * for each drhd
	 *   enable fault log