On Tue, Dec 17, 2019 at 03:45:36PM +0530, Aneesh Kumar K.V wrote: > On 12/17/19 2:28 PM, Peter Zijlstra wrote: > > On Tue, Dec 17, 2019 at 12:47:13PM +0530, Aneesh Kumar K.V wrote: > > > On tlb_finish_mmu() kernel does a tlb flush before mmu gather table invalidate. > > > The mmu gather table invalidate depending on kernel config also does another > > > TLBI. Avoid the later on tlb_finish_mmu(). > > > > That is already avoided, if you look at tlb_flush_mmu_tlbonly() it does > > __tlb_range_reset(), which results in ->end = 0, which then triggers the > > early exit on the next invocation: > > > > if (!tlb->end) > > return; > > > > Is that true for tlb->fulmm flush? Hmm, no, but I'm thinking you patch is broken, even for that case. We must issue the TLBI before call_rcu(). Perhaps if we replace !tlb->end with something like: !tlb->freed_tables && !tlb->cleared_p* (which GCC should be able to do with a single load and mask) I've not really thought too hard about it yet, I need to run some errands, but I'll look at it more closely when I get back.