percpu: add optimized generic percpu accessors
[linux-2.6.git] / arch / x86 / include / asm / current.h
1 #ifndef _ASM_X86_CURRENT_H
2 #define _ASM_X86_CURRENT_H
3
4 #ifdef CONFIG_X86_32
5 #include <linux/compiler.h>
6 #include <asm/percpu.h>
7
8 struct task_struct;
9
10 DECLARE_PER_CPU(struct task_struct *, current_task);
11 static __always_inline struct task_struct *get_current(void)
12 {
13         return percpu_read(current_task);
14 }
15
16 #else /* X86_32 */
17
18 #ifndef __ASSEMBLY__
19 #include <asm/pda.h>
20
21 struct task_struct;
22
23 static __always_inline struct task_struct *get_current(void)
24 {
25         return read_pda(pcurrent);
26 }
27
28 #else /* __ASSEMBLY__ */
29
30 #include <asm/asm-offsets.h>
31 #define GET_CURRENT(reg) movq %gs:(pda_pcurrent),reg
32
33 #endif /* __ASSEMBLY__ */
34
35 #endif /* X86_32 */
36
37 #define current get_current()
38
39 #endif /* _ASM_X86_CURRENT_H */