iommu/vt-d: Don't enable iommu's which have been ignored
authorLu Baolu <baolu.lu@linux.intel.com>
Wed, 12 Jun 2019 00:28:47 +0000 (08:28 +0800)
committerJoerg Roedel <jroedel@suse.de>
Wed, 12 Jun 2019 08:36:59 +0000 (10:36 +0200)
The iommu driver will ignore some iommu units if there's no
device under its scope or those devices have been explicitly
set to bypass the DMA translation. Don't enable those iommu
units, otherwise the devices under its scope won't work.

Fixes: d8190dc638866 ("iommu/vt-d: Enable DMA remapping after rmrr mapped")
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel-iommu.c

index 862c978d3eb46d76d2c0634b1e38b4eb797ed5eb..03946dc4941f980c508d2b23d44d29dd8960b2f8 100644 (file)
@@ -3268,7 +3268,12 @@ static int __init init_dmars(void)
                goto error;
        }
 
-       for_each_active_iommu(iommu, drhd) {
+       for_each_iommu(iommu, drhd) {
+               if (drhd->ignored) {
+                       iommu_disable_translation(iommu);
+                       continue;
+               }
+
                /*
                 * Find the max pasid size of all IOMMU's in the system.
                 * We need to ensure the system pasid table is no bigger
@@ -4821,7 +4826,7 @@ int __init intel_iommu_init(void)
 
        /* Finally, we enable the DMA remapping hardware. */
        for_each_iommu(iommu, drhd) {
-               if (!translation_pre_enabled(iommu))
+               if (!drhd->ignored && !translation_pre_enabled(iommu))
                        iommu_enable_translation(iommu);
 
                iommu_disable_protect_mem_regions(iommu);