Messages in this thread Patch in this message | | | From | Lu Baolu <> | Subject | [PATCH 1/2] iommu/vt-d: Avoid unnecessary device TLB flush in map path | Date | Sun, 7 Apr 2024 22:42:31 +0800 |
| |
iommu_flush_iotlb_psi() is called in map and unmap paths. The caching mode check before device TLB invalidation will cause device TLB invalidation always issued if IOMMU is not running in the caching mode. This is inefficient and causes performance overhead.
Make device TLB invalidation behavior consistent between batched mode unmapping and strict mode unmapping. Device TLB invalidation should only be requested in the unmap path if the IOMMU is not in caching mode.
Fixes: bf92df30df90 ("intel-iommu: Only avoid flushing device IOTLB for domain ID 0 in caching mode") Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> --- drivers/iommu/intel/iommu.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 50eb9aed47cc..493b6a600394 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -1501,11 +1501,7 @@ static void iommu_flush_iotlb_psi(struct intel_iommu *iommu, else __iommu_flush_iotlb_psi(iommu, did, pfn, pages, ih); - /* - * In caching mode, changes of pages from non-present to present require - * flush. However, device IOTLB doesn't need to be flushed in this case. - */ - if (!cap_caching_mode(iommu->cap) || !map) + if (!cap_caching_mode(iommu->cap) && !map) iommu_flush_dev_iotlb(domain, addr, mask); } -- 2.34.1
| |