aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLu Baolu <[email protected]>2021-07-12 15:17:12 +0800
committerJoerg Roedel <[email protected]>2021-07-14 12:58:07 +0200
commit474dd1c6506411752a9b2f2233eec11f1733a099 (patch)
tree581b91dc6c8cd75f7c4c7882376a69280ae09272
parent37764b952e1b39053defc7ebe5dcd8c4e3e78de9 (diff)
iommu/vt-d: Fix clearing real DMA device's scalable-mode context entries
The commit 2b0140c69637e ("iommu/vt-d: Use pci_real_dma_dev() for mapping") fixes an issue of "sub-device is removed where the context entry is cleared for all aliases". But this commit didn't consider the PASID entry and PASID table in VT-d scalable mode. This fix increases the coverage of scalable mode. Suggested-by: Sanjay Kumar <[email protected]> Fixes: 8038bdb855331 ("iommu/vt-d: Only clear real DMA device's context entries") Fixes: 2b0140c69637e ("iommu/vt-d: Use pci_real_dma_dev() for mapping") Cc: [email protected] # v5.6+ Cc: Jon Derrick <[email protected]> Signed-off-by: Lu Baolu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Joerg Roedel <[email protected]>
-rw-r--r--drivers/iommu/intel/iommu.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 57270290d62b..dd22fc7d5176 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -4472,14 +4472,13 @@ static void __dmar_remove_one_dev_info(struct device_domain_info *info)
iommu = info->iommu;
domain = info->domain;
- if (info->dev) {
+ if (info->dev && !dev_is_real_dma_subdevice(info->dev)) {
if (dev_is_pci(info->dev) && sm_supported(iommu))
intel_pasid_tear_down_entry(iommu, info->dev,
PASID_RID2PASID, false);
iommu_disable_dev_iotlb(info);
- if (!dev_is_real_dma_subdevice(info->dev))
- domain_context_clear(info);
+ domain_context_clear(info);
intel_pasid_free_table(info->dev);
}