[PATCH] arm64: mte: Make mte_check_tfsr_*() conditional on KASAN instead of MTE
Alexandru Elisei
alexandru.elisei at arm.com
Tue Jun 11 03:41:58 PDT 2024
Hi,
On Tue, May 28, 2024 at 03:51:30PM -0700, Peter Collingbourne wrote:
> 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 at google.com>
> Link: https://linux-review.googlesource.com/id/I22d98d1483dd400a95595946552b769a5a1ad7bd
> ---
> arch/arm64/include/asm/mte.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/include/asm/mte.h b/arch/arm64/include/asm/mte.h
> index 91fbd5c8a3911..0f84518632b4a 100644
> --- a/arch/arm64/include/asm/mte.h
> +++ b/arch/arm64/include/asm/mte.h
> @@ -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;
The change looks correct to me - tag check faults for the kernel are
enabled only when hw kasan is enabled. The functions are already compiled
only when CONFIG_KASAN_HW_TAGS=y, so it makes sense to further restrict
them based on kasan_hw_tags_enabled():
Reviewed-by: Alexandru Elisei <alexandru.elisei at arm.com>
Can't speak for the performance results, altough skipping the dsb + isb on
the exit path sure looks nice.
Thanks,
Alex
>
> /*
> --
> 2.45.1.288.g0e0cd299f1-goog
>
More information about the linux-arm-kernel
mailing list