Skip to content

Commit 6ad931a

Browse files
LuBaolujoergroedel
authored andcommitted
iommu/vt-d: Avoid unnecessary global DMA cache invalidation
Some VT-d hardware implementations invalidate all DMA remapping hardware translation caches as part of SRTP flow. The VT-d spec adds a ESRTPS (Enhanced Set Root Table Pointer Support, section 11.4.2 in VT-d spec) capability bit to indicate this. With this bit set, software has no need to issue the global invalidation request. Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Link: https://lore.kernel.org/r/20220919062523.3438951-3-baolu.lu@linux.intel.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
1 parent eb5b201 commit 6ad931a

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

drivers/iommu/intel/iommu.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,13 @@ static void iommu_set_root_entry(struct intel_iommu *iommu)
12391239

12401240
raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
12411241

1242+
/*
1243+
* Hardware invalidates all DMA remapping hardware translation
1244+
* caches as part of SRTP flow.
1245+
*/
1246+
if (cap_esrtps(iommu->cap))
1247+
return;
1248+
12421249
iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
12431250
if (sm_supported(iommu))
12441251
qi_flush_pasid_cache(iommu, 0, QI_PC_GLOBAL, 0);

drivers/iommu/intel/iommu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@
146146
/*
147147
* Decoding Capability Register
148148
*/
149+
#define cap_esrtps(c) (((c) >> 63) & 1)
149150
#define cap_esirtps(c) (((c) >> 62) & 1)
150151
#define cap_fl5lp_support(c) (((c) >> 60) & 1)
151152
#define cap_pi_support(c) (((c) >> 59) & 1)

0 commit comments

Comments
 (0)