ARM: 9194/1: assembler: simplify ldr_this_cpu for !SMP builds
authorArd Biesheuvel <ardb@kernel.org>
Wed, 20 Apr 2022 08:38:27 +0000 (09:38 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 20 May 2022 11:32:32 +0000 (12:32 +0100)
When CONFIG_SMP is not defined, the CPU offset is always zero, and so
we can simplify the sequence to load a per-CPU variable.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/assembler.h

index 34fe8d2..8e59d74 100644 (file)
@@ -692,8 +692,12 @@ THUMB(     orr     \reg , \reg , #PSR_T_BIT        )
        /*
         * ldr_va - load a 32-bit word from the virtual address of \sym
         */
-       .macro          ldr_va, rd:req, sym:req, cond
+       .macro          ldr_va, rd:req, sym:req, cond, tmp
+       .ifnb           \tmp
+       __ldst_va       ldr, \rd, \tmp, \sym, \cond
+       .else
        __ldst_va       ldr, \rd, \rd, \sym, \cond
+       .endif
        .endm
 
        /*
@@ -727,9 +731,11 @@ THUMB(     orr     \reg , \reg , #PSR_T_BIT        )
         *                are permitted to overlap with 'rd' if != sp
         */
        .macro          ldr_this_cpu, rd:req, sym:req, t1:req, t2:req
-#if __LINUX_ARM_ARCH__ >= 7 || \
-    !defined(CONFIG_ARM_HAS_GROUP_RELOCS) || \
-    (defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
+#ifndef CONFIG_SMP
+       ldr_va          \rd, \sym, tmp=\t1
+#elif __LINUX_ARM_ARCH__ >= 7 || \
+      !defined(CONFIG_ARM_HAS_GROUP_RELOCS) || \
+      (defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
        this_cpu_offset \t1
        mov_l           \t2, \sym
        ldr             \rd, [\t1, \t2]