arm64: mte: Enable async tag check fault
authorVincenzo Frascino <vincenzo.frascino@arm.com>
Mon, 15 Mar 2021 13:20:17 +0000 (13:20 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Sun, 11 Apr 2021 09:56:40 +0000 (10:56 +0100)
commit65812c6921cc849d86811147038dd246fa0ea18c
tree8c841e65798297cf32b10f835df7d477334d05a7
parentd8969752cc4e3294074ff0582de42d0e3c982eba
arm64: mte: Enable async tag check fault

MTE provides a mode that asynchronously updates the TFSR_EL1 register
when a tag check exception is detected.

To take advantage of this mode the kernel has to verify the status of
the register at:
  1. Context switching
  2. Return to user/EL0 (Not required in entry from EL0 since the kernel
  did not run)
  3. Kernel entry from EL1
  4. Kernel exit to EL1

If the register is non-zero a trace is reported.

Add the required features for EL1 detection and reporting.

Note: ITFSB bit is set in the SCTLR_EL1 register hence it guaranties that
the indirect writes to TFSR_EL1 are synchronized at exception entry to
EL1. On the context switch path the synchronization is guarantied by the
dsb() in __switch_to().
The dsb(nsh) in mte_check_tfsr_exit() is provisional pending
confirmation by the architects.

Cc: Will Deacon <will@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Andrey Konovalov <andreyknvl@google.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Link: https://lore.kernel.org/r/20210315132019.33202-8-vincenzo.frascino@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/mte.h
arch/arm64/kernel/entry-common.c
arch/arm64/kernel/mte.c