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

