Re: [PATCH v2 1/1] iommu/vt-d: Remove caching mode check before device TLB flush

From: Baolu Lu
Date: Thu Apr 11 2024 - 09:49:40 EST


On 2024/4/11 21:13, Robin Murphy wrote:
On 10/04/2024 6:58 am, Lu Baolu wrote:
The Caching Mode (CM) of the Intel IOMMU indicates if the hardware
implementation caches not-present or erroneous translation-structure
entries except the first-stage translation. The caching mode is
irrelevant to the device TLB , therefore there is no need to check
it before a device TLB invalidation operation.

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 caching mode.
This is wrong and causes unnecessary performance overhead.

The removal of caching mode check in intel_flush_iotlb_all() doesn't
impact anything no matter the IOMMU is working in caching mode or not.
Commit <29b32839725f> ("iommu/vt-d: Do not use flush-queue when
caching-mode is on") has already disabled flush-queue for caching mode,
hence caching mode will never call intel_flush_iotlb_all().

Well, technically it might still, at domain creation via iommu_create_device_direct_mappings(), but domain->has_iotlb_device should definitely be false at that point 🙂

Oh! I overlooked that path. :-)

Yes. iommu_create_device_direct_mappings() is called before setting the
domain to device for intel iommu driver, hence in practice the
domain->has_iotlb_device is always false.

Best regards,
baolu