1#ifndef _X86_64_CURRENT_H
2#define _X86_64_CURRENT_H
3
4#if !defined(__ASSEMBLY__)
5struct task_struct;
6
7#include <asm/pda.h>
8
9static inline struct task_struct *get_current(void)
10{
11	struct task_struct *t = read_pda(pcurrent);
12	return t;
13}
14
15
16static inline struct task_struct *stack_current(void)
17{
18	struct task_struct *current;
19	__asm__("andq %%rsp,%0; ":"=r" (current)
20		: "0" (~(unsigned long)(THREAD_SIZE-1)));
21	return current;
22}
23
24
25#define current get_current()
26
27#else
28
29#ifndef ASM_OFFSET_H
30#include <asm/offset.h>
31#endif
32
33#define GET_CURRENT(reg) movq %gs:(pda_pcurrent),reg
34
35#endif
36
37#endif /* !(_X86_64_CURRENT_H) */
38