[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20191217123416.GH2827@hirez.programming.kicks-ass.net>
Date: Tue, 17 Dec 2019 13:34:16 +0100
From: Peter Zijlstra <peterz@...radead.org>
To: "Aneesh Kumar K.V" <aneesh.kumar@...ux.ibm.com>
Cc: akpm@...ux-foundation.org, npiggin@...il.com, mpe@...erman.id.au,
linux-mm@...ck.org, linux-kernel@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org
Subject: Re: [RFC PATCH 2/2] mm/mmu_gather: Avoid multiple page walk cache
flush
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.
Powered by blists - more mailing lists