| From 474dd1c6506411752a9b2f2233eec11f1733a099 Mon Sep 17 00:00:00 2001 |
| From: Lu Baolu <baolu.lu@linux.intel.com> |
| Date: Mon, 12 Jul 2021 15:17:12 +0800 |
| Subject: iommu/vt-d: Fix clearing real DMA device's scalable-mode context entries |
| |
| From: Lu Baolu <baolu.lu@linux.intel.com> |
| |
| commit 474dd1c6506411752a9b2f2233eec11f1733a099 upstream. |
| |
| 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 <sanjay.k.kumar@intel.com> |
| 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: stable@vger.kernel.org # v5.6+ |
| Cc: Jon Derrick <jonathan.derrick@intel.com> |
| Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> |
| Link: https://lore.kernel.org/r/20210712071712.3416949-1-baolu.lu@linux.intel.com |
| Signed-off-by: Joerg Roedel <jroedel@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/iommu/intel/iommu.c | 5 ++--- |
| 1 file changed, 2 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/iommu/intel/iommu.c |
| +++ b/drivers/iommu/intel/iommu.c |
| @@ -4503,14 +4503,13 @@ static void __dmar_remove_one_dev_info(s |
| 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); |
| } |
| |