[PATCH 1/2] arm64: tlbflush: Don't broadcast if mm was only active on local cpu
Catalin Marinas
catalin.marinas at arm.com
Thu Jun 11 08:29:29 PDT 2026
On Tue, Jun 09, 2026 at 02:34:32PM -0700, sk at gentwo.org wrote:
> From: Ryan Roberts <ryan.roberts at arm.com>
>
> There are 3 variants of tlb flush that invalidate user mappings:
> flush_tlb_mm(), flush_tlb_page() and __flush_tlb_range(). All of these
> would previously unconditionally broadcast their tlbis to all cpus in
> the inner shareable domain.
>
> But this is a waste of effort if we can prove that the mm for which we
> are flushing the mappings has only ever been active on the local cpu. In
> that case, it is safe to avoid the broadcast and simply invalidate the
> current cpu.
>
> So let's track in mm_context_t::active_cpu either the mm has never been
> active on any cpu, has been active on more than 1 cpu, or has been
> active on precisely 1 cpu - and in that case, which one. We update this
> when switching context, being careful to ensure that it gets updated
> *before* installing the mm's pgtables. On the reader side, we ensure we
> read *after* the previous write(s) to the pgtable(s) that necessitated
> the tlb flush have completed. This guarrantees that if a cpu that is
> doing a tlb flush sees it's own id in active_cpu, then the old pgtable
> entry cannot have been seen by any other cpu and we can flush only the
> local cpu.
>
> Signed-off-by: Ryan Roberts <ryan.roberts at arm.com>
> Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>
> Tested-by: Huang Ying <ying.huang at linux.alibaba.com>
> [linu.cherian at arm.com: Adapted for v7.1 flush tlb API changes]
> Signed-off-by: Linu Cherian <linu.cherian at arm.com>
Nit: if you repost someone's patch, please add your signed-off-by.
--
Catalin
More information about the linux-arm-kernel
mailing list