|
@@ -4730,6 +4730,15 @@ static int intel_iommu_cpu_dead(unsigned int cpu)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void intel_disable_iommus(void)
|
|
|
+{
|
|
|
+ struct intel_iommu *iommu = NULL;
|
|
|
+ struct dmar_drhd_unit *drhd;
|
|
|
+
|
|
|
+ for_each_iommu(iommu, drhd)
|
|
|
+ iommu_disable_translation(iommu);
|
|
|
+}
|
|
|
+
|
|
|
static inline struct intel_iommu *dev_to_intel_iommu(struct device *dev)
|
|
|
{
|
|
|
return container_of(dev, struct intel_iommu, iommu.dev);
|
|
@@ -4840,8 +4849,15 @@ int __init intel_iommu_init(void)
|
|
|
goto out_free_dmar;
|
|
|
}
|
|
|
|
|
|
- if (no_iommu || dmar_disabled)
|
|
|
+ if (no_iommu || dmar_disabled) {
|
|
|
+ /*
|
|
|
+ * Make sure the IOMMUs are switched off, even when we
|
|
|
+ * boot into a kexec kernel and the previous kernel left
|
|
|
+ * them enabled
|
|
|
+ */
|
|
|
+ intel_disable_iommus();
|
|
|
goto out_free_dmar;
|
|
|
+ }
|
|
|
|
|
|
if (list_empty(&dmar_rmrr_units))
|
|
|
pr_info("No RMRR found\n");
|