[PATCH 00/10] arm64: Replace TLB invalidation preprocessor macros with C functions

Ryan Roberts ryan.roberts at arm.com
Wed Dec 10 04:29:33 PST 2025


On 11/07/2025 17:17, Will Deacon wrote:
> Hi all,
> 
> I cooked this series following a complaint from Linus back in March
> about our range-based TLB invalidation macro after we fixed an
> over-invalidation bug thanks to incorrect handling of its arguments:
> 
>   https://lore.kernel.org/all/CAHk-=wgiX0q0WCL+SFwVCYtG7JR3=2Rshse-5J3AO2Y4AgT7Jw@mail.gmail.com/
> 
> Once I started trying to rework the range macro into a C function, I
> spotted a few other opportunities for cleanup and so I've ended up with
> this series.
> 
> Testing and feedback welcome.

Hi Will,

Did this go anywhere/are you planning to post a new version? There are a couple
of other cleanups I'd like to do in this area, and also I'd like to add tlbip
support. But I don't want to spend time on it if the baseline is going to
drastically change.

If you're not planning a v2, perhaps I could have a go then extend for the
extras I want to do?

Thanks,
Ryan


> 
> Cheers,
> 
> Will
> 
> Cc: Ard Biesheuvel <ardb at kernel.org>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Ryan Roberts <ryan.roberts at arm.com>
> Cc: Mark Rutland <mark.rutland at arm.com>
> Cc: Linus Torvalds <torvalds at linux-foundation.org>
> Cc: Oliver Upton <oliver.upton at linux.dev>
> Cc: Marc Zyngier <maz at kernel.org>
> 
> --->8
> 
> Will Deacon (10):
>   arm64: mm: Introduce a C wrapper for by-level TLB invalidation helpers
>   arm64: mm: Introduce a C wrapper for by-range TLB invalidation helpers
>   arm64: mm: Implicitly invalidate user ASID based on TLBI operation
>   arm64: mm: Remove unused 'tlbi_user' argument from
>     __flush_tlb_range_op()
>   arm64: mm: Re-implement the __tlbi_level macro in C
>   arm64: mm: Simplify __TLBI_RANGE_NUM() macro
>   arm64: mm: Push __TLBI_VADDR() into __tlbi_level()
>   arm64: mm: Inline __TLBI_VADDR_RANGE() into __tlbi_range()
>   arm64: mm: Simplify __flush_tlb_range_limit_excess()
>   arm64: mm: Re-implement the __flush_tlb_range_op macro in C
> 
>  arch/arm64/include/asm/tlbflush.h | 230 ++++++++++++++++++------------
>  arch/arm64/kernel/sys_compat.c    |   2 +-
>  arch/arm64/kvm/hyp/nvhe/mm.c      |   2 +-
>  arch/arm64/kvm/hyp/pgtable.c      |   4 +-
>  4 files changed, 140 insertions(+), 98 deletions(-)
> 




More information about the linux-arm-kernel mailing list