Hi all, When unsharing hugetlb PMD page tables or collapsing pages in khugepaged, we send two IPIs: one for TLB invalidation, and another to synchronize with concurrent GUP-fast walkers. However, if the TLB flush already reaches all CPUs, the second IPI is redundant. GUP-fast runs with IRQs disabled, so when the TLB flush IPI completes, any concurrent GUP-fast must have finished. This series introduces a way for architectures to indicate their TLB flush already provides full synchronization, allowing the redundant IPI to be skipped. For now, the optimization is implemented for x86 first and applied to both hugetlb PMD unsharing and khugepaged. I will dig into other architectures later, and folks maintaining other architectures are welcome to help out. David Hildenbrand did the initial implementation. I just built on his work and relied on off-list discussions to push it further — thanks a lot David! Lance Yang (3): mm/tlb: allow architectures to skip redundant TLB sync IPIs x86/mm: implement redundant IPI elimination for PMD unsharing mm/khugepaged: skip redundant IPI in collapse_huge_page() arch/x86/include/asm/tlb.h | 17 ++++++++++++++++- include/asm-generic/tlb.h | 22 +++++++++++++++++++++- mm/khugepaged.c | 7 ++++++- 3 files changed, 43 insertions(+), 3 deletions(-) -- 2.49.0