Re: [PATCH 07/12] x86/tlb: use INVLPGB in flush_tlb_all

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux