]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
arm64: mte: Make mte_check_tfsr_*() conditional on KASAN instead of MTE
authorPeter Collingbourne <pcc@google.com>
Tue, 28 May 2024 22:51:30 +0000 (15:51 -0700)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 12 Jun 2024 15:01:57 +0000 (16:01 +0100)
The check in mte_check_tfsr_el1() is only necessary if HW tag
based KASAN is enabled. However, we were also executing the check
if MTE is enabled and KASAN is enabled at build time but disabled
at runtime. This turned out to cause a measurable increase in
power consumption on a specific microarchitecture after enabling
MTE. Moreover, on the same system, an increase in invalid syscall
latency (as measured by [1]) of around 20-30% (depending on the
cluster) was observed after enabling MTE; this almost entirely goes
away after removing this check. Therefore, make the check conditional
on whether KASAN is enabled rather than on whether MTE is enabled.

[1] https://lore.kernel.org/all/CAMn1gO4MwRV8bmFJ_SeY5tsYNPn2ZP56LjAhafygjFaKuu5ouw@mail.gmail.com/

Signed-off-by: Peter Collingbourne <pcc@google.com>
Link: https://linux-review.googlesource.com/id/I22d98d1483dd400a95595946552b769a5a1ad7bd
Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com>
Link: https://lore.kernel.org/r/20240528225131.3577704-1-pcc@google.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/mte.h

index 91fbd5c8a3911d1662458a22fa9dae25530ec445..0f84518632b4a629c9e0110384c4b0839f8bd443 100644 (file)
@@ -182,7 +182,7 @@ void mte_check_tfsr_el1(void);
 
 static inline void mte_check_tfsr_entry(void)
 {
-       if (!system_supports_mte())
+       if (!kasan_hw_tags_enabled())
                return;
 
        mte_check_tfsr_el1();
@@ -190,7 +190,7 @@ static inline void mte_check_tfsr_entry(void)
 
 static inline void mte_check_tfsr_exit(void)
 {
-       if (!system_supports_mte())
+       if (!kasan_hw_tags_enabled())
                return;
 
        /*