]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/vt-d: Flush piotlb for SVM and Nested domain
authorYi Liu <yi.l.liu@intel.com>
Thu, 22 Jan 2026 01:48:53 +0000 (09:48 +0800)
committerJoerg Roedel <joerg.roedel@amd.com>
Thu, 22 Jan 2026 08:20:29 +0000 (09:20 +0100)
Besides the paging domains that use FS, SVM and Nested domains need to
use piotlb invalidation descriptor as well.

Fixes: b33125296b50 ("iommu/vt-d: Create unique domain ops for each stage")
Cc: stable@vger.kernel.org
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20251223065824.6164-1-yi.l.liu@intel.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
drivers/iommu/intel/cache.c

index 265e7290256b573d0a2f532f6e2bd5c7dee6441d..385ae5cfb30d4af1afd8354dfb86702720cf3da5 100644 (file)
@@ -363,6 +363,13 @@ static void qi_batch_add_pasid_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16
        qi_batch_increment_index(iommu, batch);
 }
 
+static bool intel_domain_use_piotlb(struct dmar_domain *domain)
+{
+       return domain->domain.type == IOMMU_DOMAIN_SVA ||
+                       domain->domain.type == IOMMU_DOMAIN_NESTED ||
+                       intel_domain_is_fs_paging(domain);
+}
+
 static void cache_tag_flush_iotlb(struct dmar_domain *domain, struct cache_tag *tag,
                                  unsigned long addr, unsigned long pages,
                                  unsigned long mask, int ih)
@@ -370,7 +377,7 @@ static void cache_tag_flush_iotlb(struct dmar_domain *domain, struct cache_tag *
        struct intel_iommu *iommu = tag->iommu;
        u64 type = DMA_TLB_PSI_FLUSH;
 
-       if (intel_domain_is_fs_paging(domain)) {
+       if (intel_domain_use_piotlb(domain)) {
                qi_batch_add_piotlb(iommu, tag->domain_id, tag->pasid, addr,
                                    pages, ih, domain->qi_batch);
                return;