|  | #ifndef _X86_CURRENT_H | 
|  | #define _X86_CURRENT_H | 
|  |  | 
|  | #ifdef CONFIG_X86_32 | 
|  | #include <linux/compiler.h> | 
|  | #include <asm/percpu.h> | 
|  |  | 
|  | struct task_struct; | 
|  |  | 
|  | DECLARE_PER_CPU(struct task_struct *, current_task); | 
|  | static __always_inline struct task_struct *get_current(void) | 
|  | { | 
|  | return x86_read_percpu(current_task); | 
|  | } | 
|  |  | 
|  | #else /* X86_32 */ | 
|  |  | 
|  | #ifndef __ASSEMBLY__ | 
|  | #include <asm/pda.h> | 
|  |  | 
|  | struct task_struct; | 
|  |  | 
|  | static __always_inline struct task_struct *get_current(void) | 
|  | { | 
|  | return read_pda(pcurrent); | 
|  | } | 
|  |  | 
|  | #else /* __ASSEMBLY__ */ | 
|  |  | 
|  | #include <asm/asm-offsets.h> | 
|  | #define GET_CURRENT(reg) movq %gs:(pda_pcurrent),reg | 
|  |  | 
|  | #endif /* __ASSEMBLY__ */ | 
|  |  | 
|  | #endif /* X86_32 */ | 
|  |  | 
|  | #define current get_current() | 
|  |  | 
|  | #endif /* X86_CURRENT_H */ |