[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <978b4da7c7949e70a515fd04279e12a39e575f1b.camel@surriel.com>
Date: Mon, 06 Jan 2025 12:35:17 -0500
From: Rik van Riel <riel@...riel.com>
To: Dave Hansen <dave.hansen@...el.com>, x86@...nel.org
Cc: linux-kernel@...r.kernel.org, kernel-team@...a.com,
dave.hansen@...ux.intel.com, luto@...nel.org, peterz@...radead.org,
tglx@...utronix.de, mingo@...hat.com, bp@...en8.de, hpa@...or.com,
akpm@...ux-foundation.org, nadav.amit@...il.com,
zhengqi.arch@...edance.com, linux-mm@...ck.org
Subject: Re: [PATCH 07/12] x86/tlb: use INVLPGB in flush_tlb_all
On Mon, 2025-01-06 at 09:29 -0800, Dave Hansen wrote:
> On 12/30/24 09:53, Rik van Riel wrote:
> > --- a/arch/x86/mm/tlb.c
> > +++ b/arch/x86/mm/tlb.c
> > @@ -1074,6 +1074,12 @@ static void do_flush_tlb_all(void *info)
> > void flush_tlb_all(void)
> > {
> > count_vm_tlb_event(NR_TLB_REMOTE_FLUSH);
> > + if (cpu_feature_enabled(X86_FEATURE_INVLPGB)) {
> > + guard(preempt)();
> > + invlpgb_flush_all();
> > + tlbsync();
> > + return;
> > + }
>
> After seeing a few of these, I'd really prefer that the preempt and
> tlbsync() logic be hidden in the invlpgb_*() helper, or *a* helper at
> least.
>
> This would be a lot easier on the eyes if it were something like:
>
> flushed = invlpgb_flush_all();
> if (flushed)
> return;
One issue here is that some of the invlpgb helpers
are supposed to be asynchronous, because we can
have multiple of those flushes pending simultaneously,
and then wait for them to complete with a tlbsync.
How would we avoid the confusion between the two
types (async vs sync) invlpgb helpers?
I'm all for cleaning this up, but I have not
thought of a good idea yet...
--
All Rights Reversed.
Powered by blists - more mailing lists