]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: tlb: Allow XZR argument to TLBI ops
authorMark Rutland <mark.rutland@arm.com>
Wed, 18 Feb 2026 16:43:47 +0000 (16:43 +0000)
committerWill Deacon <will@kernel.org>
Wed, 25 Feb 2026 21:37:44 +0000 (21:37 +0000)
The TLBI instruction accepts XZR as a register argument, and for TLBI
operations with a register argument, there is no functional difference
between using XZR or another GPR which contains zeroes. Operations
without a register argument are encoded as if XZR were used.

Allow the __TLBI_1() macro to use XZR when a register argument is all
zeroes.

Today this only results in a trivial code saving in
__do_compat_cache_op()'s workaround for Neoverse-N1 erratum #1542419. In
subsequent patches this pattern will be used more generally.

There should be no functional change as a result of this patch.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Oliver Upton <oupton@kernel.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/tlbflush.h

index a2d65d7d6aaeb486bf6becf18fb875396a465658..bf1cc9949dc871ef9582202500b5696863b51581 100644 (file)
                            : : )
 
 #define __TLBI_1(op, arg) asm (ARM64_ASM_PREAMBLE                             \
-                              "tlbi " #op ", %0\n"                            \
+                              "tlbi " #op ", %x0\n"                           \
                   ALTERNATIVE("nop\n                   nop",                  \
-                              "dsb ish\n               tlbi " #op ", %0",     \
+                              "dsb ish\n               tlbi " #op ", %x0",    \
                               ARM64_WORKAROUND_REPEAT_TLBI,                   \
                               CONFIG_ARM64_WORKAROUND_REPEAT_TLBI)            \
-                           : : "r" (arg))
+                           : : "rZ" (arg))
 
 #define __TLBI_N(op, arg, n, ...) __TLBI_##n(op, arg)