linux/arch/mips/include/asm/thread_info.h
<<
>>
Prefs
   1/* thread_info.h: MIPS low-level thread information
   2 *
   3 * Copyright (C) 2002  David Howells (dhowells@redhat.com)
   4 * - Incorporating suggestions made by Linus Torvalds and Dave Miller
   5 */
   6
   7#ifndef _ASM_THREAD_INFO_H
   8#define _ASM_THREAD_INFO_H
   9
  10#ifdef __KERNEL__
  11
  12
  13#ifndef __ASSEMBLY__
  14
  15#include <asm/processor.h>
  16
  17/*
  18 * low level task data that entry.S needs immediate access to
  19 * - this struct should fit entirely inside of one cache line
  20 * - this struct shares the supervisor stack pages
  21 * - if the contents of this structure are changed, the assembly constants
  22 *   must also be changed
  23 */
  24struct thread_info {
  25        struct task_struct      *task;          /* main task structure */
  26        struct exec_domain      *exec_domain;   /* execution domain */
  27        unsigned long           flags;          /* low level flags */
  28        unsigned long           tp_value;       /* thread pointer */
  29        __u32                   cpu;            /* current CPU */
  30        int                     preempt_count;  /* 0 => preemptable, <0 => BUG */
  31
  32        mm_segment_t            addr_limit;     /*
  33                                                 * thread address space limit:
  34                                                 * 0x7fffffff for user-thead
  35                                                 * 0xffffffff for kernel-thread
  36                                                 */
  37        struct restart_block    restart_block;
  38        struct pt_regs          *regs;
  39};
  40
  41/*
  42 * macros/functions for gaining access to the thread information structure
  43 */
  44#define INIT_THREAD_INFO(tsk)                   \
  45{                                               \
  46        .task           = &tsk,                 \
  47        .exec_domain    = &default_exec_domain, \
  48        .flags          = _TIF_FIXADE,          \
  49        .cpu            = 0,                    \
  50        .preempt_count  = INIT_PREEMPT_COUNT,   \
  51        .addr_limit     = KERNEL_DS,            \
  52        .restart_block  = {                     \
  53                .fn = do_no_restart_syscall,    \
  54        },                                      \
  55}
  56
  57#define init_thread_info        (init_thread_union.thread_info)
  58#define init_stack              (init_thread_union.stack)
  59
  60/* How to get the thread information struct from C.  */
  61static inline struct thread_info *current_thread_info(void)
  62{
  63        register struct thread_info *__current_thread_info __asm__("$28");
  64
  65        return __current_thread_info;
  66}
  67
  68#endif /* !__ASSEMBLY__ */
  69
  70/* thread information allocation */
  71#if defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_32BIT)
  72#define THREAD_SIZE_ORDER (1)
  73#endif
  74#if defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_64BIT)
  75#define THREAD_SIZE_ORDER (2)
  76#endif
  77#ifdef CONFIG_PAGE_SIZE_8KB
  78#define THREAD_SIZE_ORDER (1)
  79#endif
  80#ifdef CONFIG_PAGE_SIZE_16KB
  81#define THREAD_SIZE_ORDER (0)
  82#endif
  83#ifdef CONFIG_PAGE_SIZE_32KB
  84#define THREAD_SIZE_ORDER (0)
  85#endif
  86#ifdef CONFIG_PAGE_SIZE_64KB
  87#define THREAD_SIZE_ORDER (0)
  88#endif
  89
  90#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
  91#define THREAD_MASK (THREAD_SIZE - 1UL)
  92
  93#define STACK_WARN      (THREAD_SIZE / 8)
  94
  95#define PREEMPT_ACTIVE          0x10000000
  96
  97/*
  98 * thread information flags
  99 * - these are process state flags that various assembly files may need to
 100 *   access
 101 * - pending work-to-be-done flags are in LSW
 102 * - other flags in MSW
 103 */
 104#define TIF_SIGPENDING          1       /* signal pending */
 105#define TIF_NEED_RESCHED        2       /* rescheduling necessary */
 106#define TIF_SYSCALL_AUDIT       3       /* syscall auditing active */
 107#define TIF_SECCOMP             4       /* secure computing */
 108#define TIF_NOTIFY_RESUME       5       /* callback before returning to user */
 109#define TIF_RESTORE_SIGMASK     9       /* restore signal mask in do_signal() */
 110#define TIF_USEDFPU             16      /* FPU was used by this task this quantum (SMP) */
 111#define TIF_MEMDIE              18      /* is terminating due to OOM killer */
 112#define TIF_NOHZ                19      /* in adaptive nohz mode */
 113#define TIF_FIXADE              20      /* Fix address errors in software */
 114#define TIF_LOGADE              21      /* Log address errors to syslog */
 115#define TIF_32BIT_REGS          22      /* also implies 16/32 fprs */
 116#define TIF_32BIT_ADDR          23      /* 32-bit address space (o32/n32) */
 117#define TIF_FPUBOUND            24      /* thread bound to FPU-full CPU set */
 118#define TIF_LOAD_WATCH          25      /* If set, load watch registers */
 119#define TIF_SYSCALL_TRACE       31      /* syscall trace active */
 120
 121#define _TIF_SYSCALL_TRACE      (1<<TIF_SYSCALL_TRACE)
 122#define _TIF_SIGPENDING         (1<<TIF_SIGPENDING)
 123#define _TIF_NEED_RESCHED       (1<<TIF_NEED_RESCHED)
 124#define _TIF_SYSCALL_AUDIT      (1<<TIF_SYSCALL_AUDIT)
 125#define _TIF_SECCOMP            (1<<TIF_SECCOMP)
 126#define _TIF_NOTIFY_RESUME      (1<<TIF_NOTIFY_RESUME)
 127#define _TIF_USEDFPU            (1<<TIF_USEDFPU)
 128#define _TIF_NOHZ               (1<<TIF_NOHZ)
 129#define _TIF_FIXADE             (1<<TIF_FIXADE)
 130#define _TIF_LOGADE             (1<<TIF_LOGADE)
 131#define _TIF_32BIT_REGS         (1<<TIF_32BIT_REGS)
 132#define _TIF_32BIT_ADDR         (1<<TIF_32BIT_ADDR)
 133#define _TIF_FPUBOUND           (1<<TIF_FPUBOUND)
 134#define _TIF_LOAD_WATCH         (1<<TIF_LOAD_WATCH)
 135
 136#define _TIF_WORK_SYSCALL_ENTRY (_TIF_NOHZ | _TIF_SYSCALL_TRACE |       \
 137                                 _TIF_SYSCALL_AUDIT)
 138
 139/* work to do in syscall_trace_leave() */
 140#define _TIF_WORK_SYSCALL_EXIT  (_TIF_NOHZ | _TIF_SYSCALL_TRACE |       \
 141                                 _TIF_SYSCALL_AUDIT)
 142
 143/* work to do on interrupt/exception return */
 144#define _TIF_WORK_MASK          \
 145        (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_NOTIFY_RESUME)
 146/* work to do on any return to u-space */
 147#define _TIF_ALLWORK_MASK       (_TIF_NOHZ | _TIF_WORK_MASK |           \
 148                                 _TIF_WORK_SYSCALL_EXIT)
 149
 150#endif /* __KERNEL__ */
 151
 152#endif /* _ASM_THREAD_INFO_H */
 153