On 3/9/26 03:07, Lance Yang wrote:
> From: Lance Yang <[email protected]>
> 
> When page table operations require synchronization with software/lockless
> walkers, they call tlb_remove_table_sync_{one,rcu}() after flushing the
> TLB (tlb->freed_tables or tlb->unshared_tables).
> 
> On architectures where the TLB flush already sends IPIs to all target CPUs,
> the subsequent sync IPI broadcast is redundant. This is not only costly on
> large systems where it disrupts all CPUs even for single-process page table
> operations, but has also been reported to hurt RT workloads[1].
> 
> Introduce tlb_table_flush_implies_ipi_broadcast() to check if the prior TLB
> flush already provided the necessary synchronization. When true, the sync
> calls can early-return.
> 
> A few cases rely on this synchronization:
> 
> 1) hugetlb PMD unshare[2]: The problem is not the freeing but the reuse
>    of the PMD table for other purposes in the last remaining user after
>    unsharing.
> 
> 2) khugepaged collapse[3]: Ensure no concurrent GUP-fast before collapsing
>    and (possibly) freeing the page table / re-depositing it.
> 
> Currently always returns false (no behavior change). The follow-up patch
> will enable the optimization for x86.
> 
> [1] 
> https://lore.kernel.org/linux-mm/[email protected]/
> [2] 
> https://lore.kernel.org/linux-mm/[email protected]/
> [3] 
> https://lore.kernel.org/linux-mm/[email protected]/
> 
> Suggested-by: David Hildenbrand (Arm) <[email protected]>
> Signed-off-by: Lance Yang <[email protected]>
> ---

Acked-by: David Hildenbrand (Arm) <[email protected]>

-- 
Cheers,

David

Reply via email to