xref: /OK3568_Linux_fs/kernel/arch/h8300/include/asm/thread_info.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* thread_info.h: h8300 low-level thread information
3*4882a593Smuzhiyun  * adapted from the i386 and PPC versions by Yoshinori Sato <ysato@users.sourceforge.jp>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2002  David Howells (dhowells@redhat.com)
6*4882a593Smuzhiyun  * - Incorporating suggestions made by Linus Torvalds and Dave Miller
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef _ASM_THREAD_INFO_H
10*4882a593Smuzhiyun #define _ASM_THREAD_INFO_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <asm/page.h>
13*4882a593Smuzhiyun #include <asm/segment.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifdef __KERNEL__
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /*
18*4882a593Smuzhiyun  * Size of kernel stack for each process. This must be a power of 2...
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun #define THREAD_SIZE_ORDER	1
21*4882a593Smuzhiyun #define THREAD_SIZE		8192	/* 2 pages */
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #ifndef __ASSEMBLY__
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*
26*4882a593Smuzhiyun  * low level task data.
27*4882a593Smuzhiyun  * If you change this, change the TI_* offsets below to match.
28*4882a593Smuzhiyun  */
29*4882a593Smuzhiyun struct thread_info {
30*4882a593Smuzhiyun 	struct task_struct *task;		/* main task structure */
31*4882a593Smuzhiyun 	unsigned long	   flags;		/* low level flags */
32*4882a593Smuzhiyun 	int		   cpu;			/* cpu we're on */
33*4882a593Smuzhiyun 	int		   preempt_count;	/* 0 => preemptable, <0 => BUG */
34*4882a593Smuzhiyun 	mm_segment_t		addr_limit;
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /*
38*4882a593Smuzhiyun  * macros/functions for gaining access to the thread information structure
39*4882a593Smuzhiyun  */
40*4882a593Smuzhiyun #define INIT_THREAD_INFO(tsk)			\
41*4882a593Smuzhiyun {						\
42*4882a593Smuzhiyun 	.task =		&tsk,			\
43*4882a593Smuzhiyun 	.flags =	0,			\
44*4882a593Smuzhiyun 	.cpu =		0,			\
45*4882a593Smuzhiyun 	.preempt_count = INIT_PREEMPT_COUNT,	\
46*4882a593Smuzhiyun 	.addr_limit	= KERNEL_DS,		\
47*4882a593Smuzhiyun }
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun /* how to get the thread information struct from C */
current_thread_info(void)50*4882a593Smuzhiyun static inline struct thread_info *current_thread_info(void)
51*4882a593Smuzhiyun {
52*4882a593Smuzhiyun 	struct thread_info *ti;
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun 	__asm__("mov.l	sp, %0\n\t"
55*4882a593Smuzhiyun 		"and.w	%1, %T0"
56*4882a593Smuzhiyun 		: "=&r"(ti)
57*4882a593Smuzhiyun 		: "i" (~(THREAD_SIZE-1) & 0xffff));
58*4882a593Smuzhiyun 	return ti;
59*4882a593Smuzhiyun }
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /*
64*4882a593Smuzhiyun  * thread information flag bit numbers
65*4882a593Smuzhiyun  */
66*4882a593Smuzhiyun #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
67*4882a593Smuzhiyun #define TIF_SIGPENDING		1	/* signal pending */
68*4882a593Smuzhiyun #define TIF_NEED_RESCHED	2	/* rescheduling necessary */
69*4882a593Smuzhiyun #define TIF_SINGLESTEP		3	/* singlestepping active */
70*4882a593Smuzhiyun #define TIF_MEMDIE		4	/* is terminating due to OOM killer */
71*4882a593Smuzhiyun #define TIF_RESTORE_SIGMASK	5	/* restore signal mask in do_signal() */
72*4882a593Smuzhiyun #define TIF_NOTIFY_RESUME	6	/* callback before returning to user */
73*4882a593Smuzhiyun #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
74*4882a593Smuzhiyun #define TIF_SYSCALL_TRACEPOINT	8	/* for ftrace syscall instrumentation */
75*4882a593Smuzhiyun #define TIF_POLLING_NRFLAG	9	/* true if poll_idle() is polling TIF_NEED_RESCHED */
76*4882a593Smuzhiyun #define TIF_NOTIFY_SIGNAL	10	/* signal notifications exist */
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /* as above, but as bit values */
79*4882a593Smuzhiyun #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
80*4882a593Smuzhiyun #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
81*4882a593Smuzhiyun #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
82*4882a593Smuzhiyun #define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
83*4882a593Smuzhiyun #define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP)
84*4882a593Smuzhiyun #define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT)
85*4882a593Smuzhiyun #define _TIF_SYSCALL_TRACEPOINT	(1 << TIF_SYSCALL_TRACEPOINT)
86*4882a593Smuzhiyun #define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)
87*4882a593Smuzhiyun #define _TIF_NOTIFY_SIGNAL	(1 << TIF_NOTIFY_SIGNAL)
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /* work to do in syscall trace */
90*4882a593Smuzhiyun #define _TIF_WORK_SYSCALL_MASK	(_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
91*4882a593Smuzhiyun 				 _TIF_SYSCALL_AUDIT | _TIF_SYSCALL_TRACEPOINT)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun /* work to do on any return to u-space */
94*4882a593Smuzhiyun #define _TIF_ALLWORK_MASK	(_TIF_SYSCALL_TRACE | _TIF_SIGPENDING      | \
95*4882a593Smuzhiyun 				 _TIF_NEED_RESCHED  | _TIF_SYSCALL_AUDIT   | \
96*4882a593Smuzhiyun 				 _TIF_SINGLESTEP    | _TIF_NOTIFY_RESUME   | \
97*4882a593Smuzhiyun 				 _TIF_SYSCALL_TRACEPOINT | _TIF_NOTIFY_SIGNAL)
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun /* work to do on interrupt/exception return */
100*4882a593Smuzhiyun #define _TIF_WORK_MASK		(_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \
101*4882a593Smuzhiyun 				 _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP))
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun #endif /* __KERNEL__ */
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #endif /* _ASM_THREAD_INFO_H */
106