ARM: make get_current() and __my_cpu_offset() __always_inline
authorArd Biesheuvel <ardb@kernel.org>
Mon, 24 Jan 2022 22:32:51 +0000 (23:32 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Mon, 31 Jan 2022 15:06:35 +0000 (16:06 +0100)
The get_current() and __my_cpu_offset() accessors evaluate to only a
single instruction emitted inline, but due to the size of the asm string
that is created for SMP+v6 configurations, the compiler assumes
otherwise, and may emit the functions out of line instead.

So use __always_inline to avoid this.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
arch/arm/include/asm/current.h
arch/arm/include/asm/percpu.h

index 131a89b..1e1178b 100644 (file)
@@ -14,7 +14,7 @@ struct task_struct;
 
 extern struct task_struct *__current;
 
-static inline __attribute_const__ struct task_struct *get_current(void)
+static __always_inline __attribute_const__ struct task_struct *get_current(void)
 {
        struct task_struct *cur;
 
index a09034a..7545c87 100644 (file)
@@ -25,7 +25,7 @@ static inline void set_my_cpu_offset(unsigned long off)
        asm volatile("mcr p15, 0, %0, c13, c0, 4" : : "r" (off) : "memory");
 }
 
-static inline unsigned long __my_cpu_offset(void)
+static __always_inline unsigned long __my_cpu_offset(void)
 {
        unsigned long off;