Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */ 2 : #ifndef _ASM_X86_CURRENT_H 3 : #define _ASM_X86_CURRENT_H 4 : 5 : #include <linux/compiler.h> 6 : 7 : #ifndef __ASSEMBLY__ 8 : 9 : #include <linux/cache.h> 10 : #include <asm/percpu.h> 11 : 12 : struct task_struct; 13 : 14 : struct pcpu_hot { 15 : union { 16 : struct { 17 : struct task_struct *current_task; 18 : int preempt_count; 19 : int cpu_number; 20 : #ifdef CONFIG_CALL_DEPTH_TRACKING 21 : u64 call_depth; 22 : #endif 23 : unsigned long top_of_stack; 24 : void *hardirq_stack_ptr; 25 : u16 softirq_pending; 26 : #ifdef CONFIG_X86_64 27 : bool hardirq_stack_inuse; 28 : #else 29 : void *softirq_stack_ptr; 30 : #endif 31 : }; 32 : u8 pad[64]; 33 : }; 34 : }; 35 : static_assert(sizeof(struct pcpu_hot) == 64); 36 : 37 : DECLARE_PER_CPU_ALIGNED(struct pcpu_hot, pcpu_hot); 38 : 39 : static __always_inline struct task_struct *get_current(void) 40 : { 41 >42974*10^7 : return this_cpu_read_stable(pcpu_hot.current_task); 42 : } 43 : 44 : #define current get_current() 45 : 46 : #endif /* __ASSEMBLY__ */ 47 : 48 : #endif /* _ASM_X86_CURRENT_H */