1/* 2 * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) 3 * Licensed under the GPL 4 */ 5 6#ifndef __UM_THREAD_INFO_H 7#define __UM_THREAD_INFO_H 8 9#ifndef __ASSEMBLY__ 10 11#include <asm/processor.h> 12#include <asm/types.h> 13 14struct thread_info { 15 struct task_struct *task; /* main task structure */ 16 struct exec_domain *exec_domain; /* execution domain */ 17 unsigned long flags; /* low level flags */ 18 __u32 cpu; /* current CPU */ 19 int preempt_count; /* 0 => preemptable, 20 <0 => BUG */ 21 mm_segment_t addr_limit; /* thread address space: 22 0-0xBFFFFFFF for user 23 0-0xFFFFFFFF for kernel */ 24 struct restart_block restart_block; 25 struct thread_info *real_thread; /* Points to non-IRQ stack */ 26}; 27 28#define INIT_THREAD_INFO(tsk) \ 29{ \ 30 .task = &tsk, \ 31 .exec_domain = &default_exec_domain, \ 32 .flags = 0, \ 33 .cpu = 0, \ 34 .preempt_count = 1, \ 35 .addr_limit = KERNEL_DS, \ 36 .restart_block = { \ 37 .fn = do_no_restart_syscall, \ 38 }, \ 39 .real_thread = NULL, \ 40} 41 42#define init_thread_info (init_thread_union.thread_info) 43#define init_stack (init_thread_union.stack) 44 45#define THREAD_SIZE ((1 << CONFIG_KERNEL_STACK_ORDER) * PAGE_SIZE) 46/* how to get the thread information struct from C */ 47static inline struct thread_info *current_thread_info(void) 48{ 49 struct thread_info *ti; 50 unsigned long mask = THREAD_SIZE - 1; 51 ti = (struct thread_info *) (((unsigned long) &ti) & ~mask); 52 return ti; 53} 54 55/* thread information allocation */ 56#define alloc_thread_info(tsk) \ 57 ((struct thread_info *) kmalloc(THREAD_SIZE, GFP_KERNEL)) 58#define free_thread_info(ti) kfree(ti) 59 60#endif 61 62#define PREEMPT_ACTIVE 0x10000000 63 64#define TIF_SYSCALL_TRACE 0 /* syscall trace active */ 65#define TIF_SIGPENDING 1 /* signal pending */ 66#define TIF_NEED_RESCHED 2 /* rescheduling necessary */ 67#define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling 68 * TIF_NEED_RESCHED 69 */ 70#define TIF_RESTART_BLOCK 4 71#define TIF_MEMDIE 5 72#define TIF_SYSCALL_AUDIT 6 73#define TIF_RESTORE_SIGMASK 7 74 75#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) 76#define _TIF_SIGPENDING (1 << TIF_SIGPENDING) 77#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) 78#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) 79#define _TIF_MEMDIE (1 << TIF_MEMDIE) 80#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) 81#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) 82 83#endif 84