On Wed, Mar 05, 2025 at 06:48:19PM +0000, Catalin Marinas wrote:
On Tue, Mar 04, 2025 at 12:51:27AM -0800, Piotr Jaroszynski wrote:
Update the __flush_tlb_range_op macro not to modify its parameters as these are unexepcted semantics. In practice, this fixes the call to mmu_notifier_arch_invalidate_secondary_tlbs() in __flush_tlb_range_nosync() to use the correct range instead of an empty range with start=end. The empty range was (un)lucky as it results in taking the invalidate-all path that doesn't cause correctness issues, but can certainly result in suboptimal perf.
This has been broken since commit 6bbd42e2df8f ("mmu_notifiers: call invalidate_range() when invalidating TLBs") when the call to the notifiers was added to __flush_tlb_range(). It predates the addition of the __flush_tlb_range_op() macro from commit 360839027a6e ("arm64: tlb: Refactor the core flush algorithm of __flush_tlb_range") that made the bug hard to spot.
That's the problem with macros.
Reviewed-by: Catalin Marinas catalin.marinas@arm.com
Will, do you want to take this as a fix? It's only a performance regression, though you never know how it breaks the callers of the macro at some point.
Yeah, I'll pick it up but I'm travelling atm so it may have to wait until next week.
Will