On Mon, Dec 16, 2019 at 07:10:30PM +0530, Aneesh Kumar K.V wrote: > On 12/16/19 6:50 PM, Peter Zijlstra wrote: > > On Mon, Dec 16, 2019 at 06:43:53PM +0530, Aneesh Kumar K.V wrote: > > > On 12/16/19 6:07 PM, Peter Zijlstra wrote: > > > > > > I'm confused, are you saing you're happy to have PowerPC eat the extra > > > > TLB invalidates? I thought you cared about PPC performance :-) > > > > > > > > > > > > > > Instead can we do > > > > > > static inline void tlb_table_invalidate(struct mmu_gather *tlb) > > > { > > > #ifndef CONFIG_MMU_GATHER_RCU_TABLE_FREE > > > * Invalidate page-table caches used by hardware walkers. Then we still > > > * need to RCU-sched wait while freeing the pages because software > > > * walkers can still be in-flight. > > > */ > > > tlb_flush_mmu_tlbonly(tlb); > > > #endif > > > } > > > > How does that not break ARM/ARM64/s390 and x86 ? > > > > Hmm I missed that usage of RCU_TABLE_NO_INVALIDATE. What use? Only PPC and SPARC64 use that option. The reason they can use it is because they don't have a hardware walker (with exception of PPC-Radix, which I suppose your below patch fudges ?!). So HAVE_RCU_TABLE_FREE will provide tlb_remove_table() for the use of freeing page-tables/directories. This is required for all architectures that have software walkers and !IPI TLBI. Arm, Arm64, Power, Sparc64, s390 and x86 use this option. While x86 natively has IPI based TLBI, a bunch of the virtualization solutions got rid of the IPI for performance. Of those, Arm, Arm64, s390, x86 (and PPC-Radix) also have hardware walkers on those page-tables, and thus _must_ TLBI in between unhooking and freeing these pages. PPC-Hash and Sparc64 OTOH only ever access the linux page-tables through the software walker and thus can forgo this TLBI, and _THAT_ is what TABLE_NO_INVALIDATE is about (there actually is a comment that clearly states this). > Ok I guess we need to revert this change that went upstream this merge > window then > > commit 52162ec784fa05f3a4b1d8e84421279998be3773 > Author: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxx> > Date: Thu Oct 24 13:28:00 2019 +0530 > > powerpc/mm/book3s64/radix: Use freed_tables instead of need_flush_all > This really looks like you've got PPC-Radix wrong. As soon as you got hardware walkers on the linux page-tables, you must not use TABLE_NO_INVALIDATE.