]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
arm64: mte: Set TCMA1 whenever MTE is present in the kernel
authorCarl Worth <carl@os.amperecomputing.com>
Thu, 15 Jan 2026 23:07:18 +0000 (15:07 -0800)
committerWill Deacon <will@kernel.org>
Tue, 27 Jan 2026 11:13:16 +0000 (11:13 +0000)
commita4e5927115f30a301f9939ed43e6a21a343e06ad
tree7b5c1a34789bfa91a07b140217ff9ab7a08788fe
parent58ce78667a641f93afa0c152c700a1673383d323
arm64: mte: Set TCMA1 whenever MTE is present in the kernel

Set the TCMA1 bit so that access to TTBR1 addresses with 0xf in their
tag bits will be treated as tag unchecked.

This is important to avoid unwanted tag checking on some
systems. Specifically, SCTLR_EL1.TCF can be set to indicate that no
tag check faults are desired. But the architecture doesn't guarantee
that in this case the system won't still perform tag checks.

Use TCMA1 to ensure that undesired tag checks are not performed. This
bit was already set in the KASAN case. Adding it to the non-KASAN case
prevents tag checking since all TTBR1 address will have a value of 0xf
in their tag bits.

This patch has been measured on an Ampere system to improve the following:

* Eliminate over 98% of kernel-side tag checks during "perf bench
  futex hash", as measured with "perf stat".

* Eliminate all MTE overhead (was previously a 25% performance
  penalty) from the Phoronix pts/memcached benchmark (1:10 Set:Get
  ration with 96 cores).

Reported-by: Taehyun Noh <taehyun@utexas.edu>
Suggested-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Carl Worth <carl@os.amperecomputing.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/mm/proc.S