xref: /linux/arch/loongarch/include/asm/current.h (revision 2ed2e359dea752e7758d29a423033031a0b96584)
1*7b5944d6STiezhu Yang /* SPDX-License-Identifier: GPL-2.0 */
2*7b5944d6STiezhu Yang #ifndef __ASM_LOONGARCH_CURRENT_H
3*7b5944d6STiezhu Yang #define __ASM_LOONGARCH_CURRENT_H
4*7b5944d6STiezhu Yang 
5*7b5944d6STiezhu Yang #include <linux/compiler.h>
6*7b5944d6STiezhu Yang 
7*7b5944d6STiezhu Yang #ifndef __ASSEMBLER__
8*7b5944d6STiezhu Yang 
9*7b5944d6STiezhu Yang #include <asm/percpu.h>
10*7b5944d6STiezhu Yang 
11*7b5944d6STiezhu Yang struct task_struct;
12*7b5944d6STiezhu Yang 
13*7b5944d6STiezhu Yang DECLARE_PER_CPU(struct task_struct *, cpu_tasks);
14*7b5944d6STiezhu Yang 
15*7b5944d6STiezhu Yang register struct task_struct *current_thread_pointer __asm__("$tp");
16*7b5944d6STiezhu Yang 
get_current(void)17*7b5944d6STiezhu Yang static __always_inline struct task_struct *get_current(void)
18*7b5944d6STiezhu Yang {
19*7b5944d6STiezhu Yang 	return current_thread_pointer;
20*7b5944d6STiezhu Yang }
21*7b5944d6STiezhu Yang 
22*7b5944d6STiezhu Yang #define current get_current()
23*7b5944d6STiezhu Yang 
set_current(struct task_struct * task)24*7b5944d6STiezhu Yang static __always_inline void set_current(struct task_struct *task)
25*7b5944d6STiezhu Yang {
26*7b5944d6STiezhu Yang 	__this_cpu_write(cpu_tasks, task);
27*7b5944d6STiezhu Yang }
28*7b5944d6STiezhu Yang 
29*7b5944d6STiezhu Yang #endif /* __ASSEMBLER__ */
30*7b5944d6STiezhu Yang 
31*7b5944d6STiezhu Yang #endif /* __ASM_LOONGARCH_CURRENT_H */
32