linux/arch/metag/include/asm/thread_info.h
<<
>>
Prefs
   1/* thread_info.h: Meta 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 * Meta port by Imagination Technologies
   7 */
   8
   9#ifndef _ASM_THREAD_INFO_H
  10#define _ASM_THREAD_INFO_H
  11
  12#include <linux/compiler.h>
  13#include <asm/page.h>
  14
  15#ifndef __ASSEMBLY__
  16#include <asm/processor.h>
  17#endif
  18
  19/*
  20 * low level task data that entry.S needs immediate access to
  21 * - this struct should fit entirely inside of one cache line
  22 * - this struct shares the supervisor stack pages
  23 * - if the contents of this structure are changed, the assembly constants must
  24 *   also be changed
  25 */
  26#ifndef __ASSEMBLY__
  27
  28/* This must be 8 byte aligned so we can ensure stack alignment. */
  29struct thread_info {
  30        struct task_struct *task;       /* main task structure */
  31        struct exec_domain *exec_domain;        /* execution domain */
  32        unsigned long flags;    /* low level flags */
  33        unsigned long status;   /* thread-synchronous flags */
  34        u32 cpu;                /* current CPU */
  35        int preempt_count;      /* 0 => preemptable, <0 => BUG */
  36
  37        mm_segment_t addr_limit;        /* thread address space */
  38        struct restart_block restart_block;
  39
  40        u8 supervisor_stack[0];
  41};
  42
  43#else /* !__ASSEMBLY__ */
  44
  45#include <generated/asm-offsets.h>
  46
  47#endif
  48
  49#ifdef CONFIG_4KSTACKS
  50#define THREAD_SHIFT            12
  51#else
  52#define THREAD_SHIFT            13
  53#endif
  54
  55#if THREAD_SHIFT >= PAGE_SHIFT
  56#define THREAD_SIZE_ORDER       (THREAD_SHIFT - PAGE_SHIFT)
  57#else
  58#define THREAD_SIZE_ORDER       0
  59#endif
  60
  61#define THREAD_SIZE             (PAGE_SIZE << THREAD_SIZE_ORDER)
  62
  63#define STACK_WARN              (THREAD_SIZE/8)
  64/*
  65 * macros/functions for gaining access to the thread information structure
  66 */
  67#ifndef __ASSEMBLY__
  68
  69#define INIT_THREAD_INFO(tsk)                   \
  70{                                               \
  71        .task           = &tsk,                 \
  72        .exec_domain    = &default_exec_domain, \
  73        .flags          = 0,                    \
  74        .cpu            = 0,                    \
  75        .preempt_count  = INIT_PREEMPT_COUNT,   \
  76        .addr_limit     = KERNEL_DS,            \
  77        .restart_block = {                      \
  78                .fn = do_no_restart_syscall,    \
  79        },                                      \
  80}
  81
  82#define init_thread_info        (init_thread_union.thread_info)
  83#define init_stack              (init_thread_union.stack)
  84
  85/* how to get the current stack pointer from C */
  86register unsigned long current_stack_pointer asm("A0StP") __used;
  87
  88/* how to get the thread information struct from C */
  89static inline struct thread_info *current_thread_info(void)
  90{
  91        return (struct thread_info *)(current_stack_pointer &
  92                                      ~(THREAD_SIZE - 1));
  93}
  94
  95#define __HAVE_ARCH_KSTACK_END
  96static inline int kstack_end(void *addr)
  97{
  98        return addr == (void *) (((unsigned long) addr & ~(THREAD_SIZE - 1))
  99                                 + sizeof(struct thread_info));
 100}
 101
 102#endif
 103
 104/*
 105 * thread information flags
 106 * - these are process state flags that various assembly files may need to
 107 *   access
 108 * - pending work-to-be-done flags are in LSW
 109 * - other flags in MSW
 110 */
 111#define TIF_SYSCALL_TRACE       0       /* syscall trace active */
 112#define TIF_SIGPENDING          1       /* signal pending */
 113#define TIF_NEED_RESCHED        2       /* rescheduling necessary */
 114#define TIF_SINGLESTEP          3       /* restore singlestep on return to user
 115                                           mode */
 116#define TIF_SYSCALL_AUDIT       4       /* syscall auditing active */
 117#define TIF_SECCOMP             5       /* secure computing */
 118#define TIF_RESTORE_SIGMASK     6       /* restore signal mask in do_signal() */
 119#define TIF_NOTIFY_RESUME       7       /* callback before returning to user */
 120#define TIF_POLLING_NRFLAG      8       /* true if poll_idle() is polling
 121                                           TIF_NEED_RESCHED */
 122#define TIF_MEMDIE              9       /* is terminating due to OOM killer */
 123#define TIF_SYSCALL_TRACEPOINT  10      /* syscall tracepoint instrumentation */
 124
 125
 126#define _TIF_SYSCALL_TRACE      (1<<TIF_SYSCALL_TRACE)
 127#define _TIF_SIGPENDING         (1<<TIF_SIGPENDING)
 128#define _TIF_NEED_RESCHED       (1<<TIF_NEED_RESCHED)
 129#define _TIF_SINGLESTEP         (1<<TIF_SINGLESTEP)
 130#define _TIF_SYSCALL_AUDIT      (1<<TIF_SYSCALL_AUDIT)
 131#define _TIF_SECCOMP            (1<<TIF_SECCOMP)
 132#define _TIF_NOTIFY_RESUME      (1<<TIF_NOTIFY_RESUME)
 133#define _TIF_RESTORE_SIGMASK    (1<<TIF_RESTORE_SIGMASK)
 134#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
 135
 136/* work to do in syscall trace */
 137#define _TIF_WORK_SYSCALL_MASK  (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
 138                                 _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \
 139                                 _TIF_SYSCALL_TRACEPOINT)
 140
 141/* work to do on any return to u-space */
 142#define _TIF_ALLWORK_MASK       (_TIF_SYSCALL_TRACE | _TIF_SIGPENDING      | \
 143                                 _TIF_NEED_RESCHED  | _TIF_SYSCALL_AUDIT   | \
 144                                 _TIF_SINGLESTEP    | _TIF_RESTORE_SIGMASK | \
 145                                 _TIF_NOTIFY_RESUME)
 146
 147/* work to do on interrupt/exception return */
 148#define _TIF_WORK_MASK          (_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \
 149                                 _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP))
 150
 151#endif /* _ASM_THREAD_INFO_H */
 152