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(-)
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.
Cheers,
Will
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Marc Zyngier <maz@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(-)
--
2.50.0.727.gbf7dc18ff4-goog
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@kernel.org> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Ryan Roberts <ryan.roberts@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Linus Torvalds <torvalds@linux-foundation.org> > Cc: Oliver Upton <oliver.upton@linux.dev> > Cc: Marc Zyngier <maz@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(-) >
On 10/12/2025 12:29, Ryan Roberts wrote: > 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? Since I didn't hear back, I've reworked the series to include Linus's suggestion and am currently testing. Plan to post against -rc1. > > Thanks, > Ryan > > >> >> Cheers, >> >> Will >> >> Cc: Ard Biesheuvel <ardb@kernel.org> >> Cc: Catalin Marinas <catalin.marinas@arm.com> >> Cc: Ryan Roberts <ryan.roberts@arm.com> >> Cc: Mark Rutland <mark.rutland@arm.com> >> Cc: Linus Torvalds <torvalds@linux-foundation.org> >> Cc: Oliver Upton <oliver.upton@linux.dev> >> Cc: Marc Zyngier <maz@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(-) >> >
On Fri, Dec 12, 2025 at 12:12:05PM +0000, Ryan Roberts wrote: > On 10/12/2025 12:29, Ryan Roberts wrote: > > On 11/07/2025 17:17, Will Deacon wrote: > >> 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? > > Since I didn't hear back, I've reworked the series to include Linus's suggestion > and am currently testing. Plan to post against -rc1. Sorry, at LPC atm and have fallen behind. I was still planning to rework this but I'm aware of other folks at Arm making changes here as well so you should be wary of that too. Regardless of macros or indirect branches, I was relatively happy with some of the cleanup that fell out of this series so I'd be keen to land it either way. Will
© 2016 - 2026 Red Hat, Inc.