blob: a863ead856f3d37de49d023a156f98b1d4f540c5 [file] [log] [blame]
Vegard Nossum77ef50a2008-06-18 17:08:48 +02001#ifndef ASM_X86__CURRENT_H
2#define ASM_X86__CURRENT_H
Christoph Lameterf0766442008-05-09 19:09:48 -07003
Thomas Gleixner96a388d2007-10-11 11:20:03 +02004#ifdef CONFIG_X86_32
Christoph Lameterf0766442008-05-09 19:09:48 -07005#include <linux/compiler.h>
6#include <asm/percpu.h>
7
8struct task_struct;
9
10DECLARE_PER_CPU(struct task_struct *, current_task);
11static __always_inline struct task_struct *get_current(void)
12{
13 return x86_read_percpu(current_task);
14}
15
16#else /* X86_32 */
17
18#ifndef __ASSEMBLY__
19#include <asm/pda.h>
20
21struct task_struct;
22
23static __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
Vegard Nossum77ef50a2008-06-18 17:08:48 +020039#endif /* ASM_X86__CURRENT_H */