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