arm64: mte: optimize asynchronous tag check fault flag check
authorPeter Collingbourne <pcc@google.com>
Wed, 18 Nov 2020 03:20:51 +0000 (19:20 -0800)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 18 Nov 2020 17:12:11 +0000 (17:12 +0000)
We don't need to check for MTE support before checking the flag
because it can only be set if the hardware supports MTE. As a result
we can unconditionally check the flag bit which is expected to be in
a register and therefore the check can be done in a single instruction
instead of first needing to load the hwcaps.

On a DragonBoard 845c with a kernel built with CONFIG_ARM64_MTE=y with
the powersave governor this reduces the cost of a kernel entry/exit
(invalid syscall) from 465.1ns to 463.8ns.

Signed-off-by: Peter Collingbourne <pcc@google.com>
Link: https://linux-review.googlesource.com/id/If4dc3501fd4e4f287322f17805509613cfe47d24
Link: https://lore.kernel.org/r/20201118032051.1405907-1-pcc@google.com
[catalin.marinas@arm.com: remove IS_ENABLED(CONFIG_ARM64_MTE)]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/syscall.c

index e4c0dadf0d92c8fa71ebe055780dc4f08764a2d6..fe3fa8fd13c8383eeab1f9a879c99d45f43ecb68 100644 (file)
@@ -123,7 +123,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
        local_daif_restore(DAIF_PROCCTX);
        user_exit();
 
-       if (system_supports_mte() && (flags & _TIF_MTE_ASYNC_FAULT)) {
+       if (flags & _TIF_MTE_ASYNC_FAULT) {
                /*
                 * Process the asynchronous tag check fault before the actual
                 * syscall. do_notify_resume() will send a signal to userspace