Re: [PATCH 4/5] x86/mm: Decouple kernel TLB flushes from flush_tlb_info
From: Sebastian Andrzej Siewior
Date: Wed Sep 23 2026 - 05:43:19 EST
On 2026-09-21 17:53:58 [+0800], Chuyi Zhou wrote:
> --- a/arch/x86/mm/tlb.c
> +++ b/arch/x86/mm/tlb.c
> @@ -1487,38 +1487,47 @@ static void invlpgb_kernel_range_flush(struct flush_tlb_info *info)
…
> void flush_tlb_kernel_range(unsigned long start, unsigned long end)
> {
> - struct flush_tlb_info info;
> -
> guard(preempt)();
> - init_flush_tlb_info(&info, NULL, start, end, PAGE_SHIFT, false,
> - TLB_GENERATION_INVALID);
>
> - if (info.end == TLB_FLUSH_ALL)
> + if (end == TLB_FLUSH_ALL ||
info.end might be TLB_FLUSH_ALL because init_flush_tlb_info() might set
it so. But 'end', which is passed as an argument, should not be
TLB_FLUSH_ALL or can it?
And if so, wouldn't the check below cover it anyway?
> + tlb_range_exceeds_ceiling(start, end, PAGE_SHIFT))
> kernel_tlb_flush_all();
> else
> - kernel_tlb_flush_range(&info);
> + kernel_tlb_flush_range(start, end);
> }
Sebastian