Re: [PATCH v2 06/12] iommu/vt-d: Cleanup intel_context_flush_present()

From: Baolu Lu
Date: Wed Mar 05 2025 - 00:40:47 EST


On 3/5/25 11:34, Yi Liu wrote:
On 2025/3/5 10:21, Baolu Lu wrote:
On 3/4/25 16:43, Yi Liu wrote:
On 2025/2/24 13:16, Lu Baolu wrote:
The intel_context_flush_present() is called in places where either the
scalable mode is disabled, or scalable mode is enabled but all PASID
entries are known to be non-present. In these cases, the flush_domains
path within intel_context_flush_present() will never execute. This dead
code is therefore removed.

The reason for this path is the remaining caller of
intel_context_flush_present() is only the domain_context_clear_one() which
is called in legacy mode path. Is it?
If so, it seems unnecessary to keep __context_flush_dev_iotlb(info); in the
end of the new intel_context_flush_present(). Also, since this helper is more for legacy mode, might be good to move it out of pasid.c.:)

This helper is for invalidating various caches when a context entry is
present and certain fields are changed. It is used in both legacy and
scalable modes.

hmmm. the kdoc says all the pasid entries are non-present, is it necessary
to flush dev_tlb in such scenario? I suppose no present pasid entry means
no pagetable as well.

The spec has defined the software behavior for cache invalidation in
"Table 28: Guidance to Software for Invalidations". This helper was
written according to it.


In the past, this helper would work even if some PASIDs were still in
use. After the changes introduced in this series, this PASID-in-use case
is removed. So remove the dead code.

yeah, I got this part. As I mentioned, the only caller now is the
domain_context_clear_one() which is used in the legacy path. That's why I
feel like it is now more for legacy mode path now after this series.

It's also called by device_pasid_table_teardown().

Thanks,
baolu