1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _ASM_PARISC_THREAD_INFO_H 3*4882a593Smuzhiyun #define _ASM_PARISC_THREAD_INFO_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #ifdef __KERNEL__ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 8*4882a593Smuzhiyun #include <asm/processor.h> 9*4882a593Smuzhiyun #include <asm/special_insns.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct thread_info { 12*4882a593Smuzhiyun struct task_struct *task; /* main task structure */ 13*4882a593Smuzhiyun unsigned long flags; /* thread_info flags (see TIF_*) */ 14*4882a593Smuzhiyun mm_segment_t addr_limit; /* user-level address space limit */ 15*4882a593Smuzhiyun __u32 cpu; /* current CPU */ 16*4882a593Smuzhiyun int preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */ 17*4882a593Smuzhiyun }; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define INIT_THREAD_INFO(tsk) \ 20*4882a593Smuzhiyun { \ 21*4882a593Smuzhiyun .task = &tsk, \ 22*4882a593Smuzhiyun .flags = 0, \ 23*4882a593Smuzhiyun .cpu = 0, \ 24*4882a593Smuzhiyun .addr_limit = KERNEL_DS, \ 25*4882a593Smuzhiyun .preempt_count = INIT_PREEMPT_COUNT, \ 26*4882a593Smuzhiyun } 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* how to get the thread information struct from C */ 29*4882a593Smuzhiyun #define current_thread_info() ((struct thread_info *)mfctl(30)) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #endif /* !__ASSEMBLY */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* thread information allocation */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #ifdef CONFIG_IRQSTACKS 36*4882a593Smuzhiyun #define THREAD_SIZE_ORDER 2 /* PA-RISC requires at least 16k stack */ 37*4882a593Smuzhiyun #else 38*4882a593Smuzhiyun #define THREAD_SIZE_ORDER 3 /* PA-RISC requires at least 32k stack */ 39*4882a593Smuzhiyun #endif 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* Be sure to hunt all references to this down when you change the size of 42*4882a593Smuzhiyun * the kernel stack */ 43*4882a593Smuzhiyun #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER) 44*4882a593Smuzhiyun #define THREAD_SHIFT (PAGE_SHIFT + THREAD_SIZE_ORDER) 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* 47*4882a593Smuzhiyun * thread information flags 48*4882a593Smuzhiyun */ 49*4882a593Smuzhiyun #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ 50*4882a593Smuzhiyun #define TIF_SIGPENDING 1 /* signal pending */ 51*4882a593Smuzhiyun #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ 52*4882a593Smuzhiyun #define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling TIF_NEED_RESCHED */ 53*4882a593Smuzhiyun #define TIF_32BIT 4 /* 32 bit binary */ 54*4882a593Smuzhiyun #define TIF_MEMDIE 5 /* is terminating due to OOM killer */ 55*4882a593Smuzhiyun #define TIF_NOTIFY_SIGNAL 6 /* signal notifications exist */ 56*4882a593Smuzhiyun #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */ 57*4882a593Smuzhiyun #define TIF_NOTIFY_RESUME 8 /* callback before returning to user */ 58*4882a593Smuzhiyun #define TIF_SINGLESTEP 9 /* single stepping? */ 59*4882a593Smuzhiyun #define TIF_BLOCKSTEP 10 /* branch stepping? */ 60*4882a593Smuzhiyun #define TIF_SECCOMP 11 /* secure computing */ 61*4882a593Smuzhiyun #define TIF_SYSCALL_TRACEPOINT 12 /* syscall tracepoint instrumentation */ 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) 64*4882a593Smuzhiyun #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) 65*4882a593Smuzhiyun #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) 66*4882a593Smuzhiyun #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) 67*4882a593Smuzhiyun #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) 68*4882a593Smuzhiyun #define _TIF_32BIT (1 << TIF_32BIT) 69*4882a593Smuzhiyun #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) 70*4882a593Smuzhiyun #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) 71*4882a593Smuzhiyun #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) 72*4882a593Smuzhiyun #define _TIF_BLOCKSTEP (1 << TIF_BLOCKSTEP) 73*4882a593Smuzhiyun #define _TIF_SECCOMP (1 << TIF_SECCOMP) 74*4882a593Smuzhiyun #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | \ 77*4882a593Smuzhiyun _TIF_NEED_RESCHED | _TIF_NOTIFY_SIGNAL) 78*4882a593Smuzhiyun #define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ 79*4882a593Smuzhiyun _TIF_BLOCKSTEP | _TIF_SYSCALL_AUDIT | \ 80*4882a593Smuzhiyun _TIF_SECCOMP | _TIF_SYSCALL_TRACEPOINT) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #ifdef CONFIG_64BIT 83*4882a593Smuzhiyun # ifdef CONFIG_COMPAT 84*4882a593Smuzhiyun # define is_32bit_task() (test_thread_flag(TIF_32BIT)) 85*4882a593Smuzhiyun # else 86*4882a593Smuzhiyun # define is_32bit_task() (0) 87*4882a593Smuzhiyun # endif 88*4882a593Smuzhiyun #else 89*4882a593Smuzhiyun # define is_32bit_task() (1) 90*4882a593Smuzhiyun #endif 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #endif /* __KERNEL__ */ 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #endif /* _ASM_PARISC_THREAD_INFO_H */ 95