1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __ASM_CURRENT_H 3 #define __ASM_CURRENT_H 4 5 #include <linux/compiler.h> 6 7 #ifndef __ASSEMBLY__ 8 9 struct task_struct; 10 11 /* 12 * We don't use read_sysreg() as we want the compiler to cache the value where 13 * possible. 14 */ 15 static __always_inline struct task_struct *get_current(void) 16 { 17 unsigned long sp_el0; 18 19 asm ("mrs %0, sp_el0" : "=r" (sp_el0)); 20 21 return (struct task_struct *)sp_el0; 22 } 23 24 #define current get_current() 25 26 #endif /* __ASSEMBLY__ */ 27 28 #endif /* __ASM_CURRENT_H */ 29 30