Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
thread_info.h
Go to the documentation of this file.
1 /* thread_info.h: description
2  *
3  * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells ([email protected])
5  * Derived from include/asm-i386/thread_info.h
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version
10  * 2 of the License, or (at your option) any later version.
11  */
12 
13 #ifndef _ASM_THREAD_INFO_H
14 #define _ASM_THREAD_INFO_H
15 
16 #ifdef __KERNEL__
17 
18 #ifndef __ASSEMBLY__
19 #include <asm/processor.h>
20 #endif
21 
22 #define THREAD_SIZE 8192
23 
24 /*
25  * low level task data that entry.S needs immediate access to
26  * - this struct should fit entirely inside of one cache line
27  * - this struct shares the supervisor stack pages
28  * - if the contents of this structure are changed, the assembly constants must also be changed
29  */
30 #ifndef __ASSEMBLY__
31 
32 struct thread_info {
33  struct task_struct *task; /* main task structure */
34  struct exec_domain *exec_domain; /* execution domain */
35  unsigned long flags; /* low level flags */
36  unsigned long status; /* thread-synchronous flags */
37  __u32 cpu; /* current CPU */
38  int preempt_count; /* 0 => preemptable, <0 => BUG */
39 
40  mm_segment_t addr_limit; /* thread address space:
41  * 0-0xBFFFFFFF for user-thead
42  * 0-0xFFFFFFFF for kernel-thread
43  */
45 
47 };
48 
49 #else /* !__ASSEMBLY__ */
50 
51 #include <asm/asm-offsets.h>
52 
53 #endif
54 
55 #define PREEMPT_ACTIVE 0x10000000
56 
57 /*
58  * macros/functions for gaining access to the thread information structure
59  */
60 #ifndef __ASSEMBLY__
61 
62 #define INIT_THREAD_INFO(tsk) \
63 { \
64  .task = &tsk, \
65  .exec_domain = &default_exec_domain, \
66  .flags = 0, \
67  .cpu = 0, \
68  .preempt_count = INIT_PREEMPT_COUNT, \
69  .addr_limit = KERNEL_DS, \
70  .restart_block = { \
71  .fn = do_no_restart_syscall, \
72  }, \
73 }
74 
75 #define init_thread_info (init_thread_union.thread_info)
76 #define init_stack (init_thread_union.stack)
77 
78 /* how to get the thread information struct from C */
79 register struct thread_info *__current_thread_info asm("gr15");
80 
81 #define current_thread_info() ({ __current_thread_info; })
82 
83 #endif /* __ASSEMBLY__ */
84 
85 /*
86  * thread information flags
87  * - these are process state flags that various assembly files may need to access
88  * - pending work-to-be-done flags are in LSW
89  * - other flags in MSW
90  */
91 #define TIF_SYSCALL_TRACE 0 /* syscall trace active */
92 #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */
93 #define TIF_SIGPENDING 2 /* signal pending */
94 #define TIF_NEED_RESCHED 3 /* rescheduling necessary */
95 #define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */
96 #define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */
97 #define TIF_MEMDIE 7 /* is terminating due to OOM killer */
98 
99 #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
100 #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
101 #define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
102 #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
103 #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
104 
105 /* work to do on interrupt/exception return */
106 #define _TIF_WORK_MASK \
107  (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_SINGLESTEP)
108 
109 /* work to do on any return to u-space */
110 #define _TIF_ALLWORK_MASK (_TIF_WORK_MASK | _TIF_SYSCALL_TRACE)
111 
112 #if _TIF_ALLWORK_MASK >= 0x2000
113 #error "_TIF_ALLWORK_MASK won't fit in an ANDI now (see entry.S)"
114 #endif
115 
116 /*
117  * Thread-synchronous status.
118  *
119  * This is different from the flags in that nobody else
120  * ever touches our thread-synchronous status, so we don't
121  * have to worry about atomic accesses.
122  */
123 #define TS_USEDFPM 0x0001 /* FPU/Media was used by this task this quantum (SMP) */
124 
125 #endif /* __KERNEL__ */
126 
127 #endif /* _ASM_THREAD_INFO_H */