summaryrefslogtreecommitdiff
path: root/drivers/iommu/intel-iommu.c
diff options
context:
space:
mode:
authorLu Baolu <baolu.lu@linux.intel.com>2019-06-12 08:28:47 +0800
committerJoerg Roedel <jroedel@suse.de>2019-06-12 10:36:59 +0200
commit6a8c6748b94b0968a2f72d4bd2231eae703c0b13 (patch)
tree7597d0f6839a4b4773237413f096eea76fd4f383 /drivers/iommu/intel-iommu.c
parentc57b260a7d7d60dfbcf794dd9836c1d9fdbf5434 (diff)
iommu/vt-d: Don't enable iommu's which have been ignored
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>
Diffstat (limited to 'drivers/iommu/intel-iommu.c')
-rw-r--r--drivers/iommu/intel-iommu.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 862c978d3eb4..03946dc4941f 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -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);