Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.12 132 lines 3.9 kB view raw
1/* 2 * include/asm-v850/thread_info.h -- v850 low-level thread information 3 * 4 * Copyright (C) 2002 NEC Corporation 5 * Copyright (C) 2002 Miles Bader <miles@gnu.org> 6 * Copyright (C) 2002 David Howells (dhowells@redhat.com) 7 * - Incorporating suggestions made by Linus Torvalds and Dave Miller 8 * 9 * This file is subject to the terms and conditions of the GNU General 10 * Public License. See the file COPYING in the main directory of this 11 * archive for more details. 12 * 13 * This file was derived from the PPC version, include/asm-ppc/thread_info.h 14 * which was adapted from the i386 version by Paul Mackerras 15 */ 16 17#ifndef __V850_THREAD_INFO_H__ 18#define __V850_THREAD_INFO_H__ 19 20#ifdef __KERNEL__ 21 22#ifndef __ASSEMBLY__ 23 24/* 25 * low level task data. 26 * If you change this, change the TI_* offsets below to match. 27 */ 28struct thread_info { 29 struct task_struct *task; /* main task structure */ 30 struct exec_domain *exec_domain; /* execution domain */ 31 unsigned long flags; /* low level flags */ 32 int cpu; /* cpu we're on */ 33 int preempt_count; 34 struct restart_block restart_block; 35}; 36 37#define INIT_THREAD_INFO(tsk) \ 38{ \ 39 .task = &tsk, \ 40 .exec_domain = &default_exec_domain, \ 41 .flags = 0, \ 42 .cpu = 0, \ 43 .preempt_count = 1, \ 44 .restart_block = { \ 45 .fn = do_no_restart_syscall, \ 46 }, \ 47} 48 49#define init_thread_info (init_thread_union.thread_info) 50#define init_stack (init_thread_union.stack) 51 52/* 53 * macros/functions for gaining access to the thread information structure 54 */ 55 56/* thread information allocation */ 57#define alloc_thread_info(tsk) ((struct thread_info *) \ 58 __get_free_pages(GFP_KERNEL, 1)) 59#define free_thread_info(ti) free_pages((unsigned long) (ti), 1) 60#define get_thread_info(ti) get_task_struct((ti)->task) 61#define put_thread_info(ti) put_task_struct((ti)->task) 62 63#endif /* __ASSEMBLY__ */ 64 65 66/* 67 * Offsets in thread_info structure, used in assembly code 68 */ 69#define TI_TASK 0 70#define TI_EXECDOMAIN 4 71#define TI_FLAGS 8 72#define TI_CPU 12 73#define TI_PREEMPT 16 74 75#define PREEMPT_ACTIVE 0x4000000 76 77/* 78 * thread information flag bit numbers 79 */ 80#define TIF_SYSCALL_TRACE 0 /* syscall trace active */ 81#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ 82#define TIF_SIGPENDING 2 /* signal pending */ 83#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ 84#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling 85 TIF_NEED_RESCHED */ 86#define TIF_MEMDIE 5 87 88/* as above, but as bit values */ 89#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) 90#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) 91#define _TIF_SIGPENDING (1<<TIF_SIGPENDING) 92#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) 93#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) 94 95 96/* Size of kernel stack for each process. */ 97#define THREAD_SIZE 0x2000 98 99/* The alignment of kernel threads, with thread_info structures at their 100 base. Thus, a pointer for a task's task structure can be derived from 101 its kernel stack pointer. */ 102#define THREAD_ALIGNMENT THREAD_SIZE 103#define THREAD_MASK (-THREAD_ALIGNMENT) 104 105 106#ifdef __ASSEMBLY__ 107 108/* Put a pointer to the current thread_info structure into REG. Note that 109 this definition requires THREAD_MASK to be representable as a signed 110 16-bit value. */ 111#define GET_CURRENT_THREAD(reg) \ 112 /* Use `addi' and then `and' instead of just `andi', because \ 113 `addi' sign-extends the immediate value, whereas `andi' \ 114 zero-extends it. */ \ 115 addi THREAD_MASK, r0, reg; \ 116 and sp, reg 117 118#else 119 120/* Return a pointer to the current thread_info structure. */ 121static inline struct thread_info *current_thread_info (void) 122{ 123 register unsigned long sp __asm__ ("sp"); 124 return (struct thread_info *)(sp & THREAD_MASK); 125} 126 127#endif /* __ASSEMBLY__ */ 128 129 130#endif /* __KERNEL__ */ 131 132#endif /* __V850_THREAD_INFO_H__ */