Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
ia64
include
asm
thread_info.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2002-2003 Hewlett-Packard Co
3
* David Mosberger-Tang <
[email protected]
>
4
*/
5
#ifndef _ASM_IA64_THREAD_INFO_H
6
#define _ASM_IA64_THREAD_INFO_H
7
8
#ifndef ASM_OFFSETS_C
9
#include <asm/asm-offsets.h>
10
#endif
11
#include <asm/processor.h>
12
#include <asm/ptrace.h>
13
14
#define PREEMPT_ACTIVE_BIT 30
15
#define PREEMPT_ACTIVE (1 << PREEMPT_ACTIVE_BIT)
16
17
#ifndef __ASSEMBLY__
18
19
/*
20
* On IA-64, we want to keep the task structure and kernel stack together, so they can be
21
* mapped by a single TLB entry and so they can be addressed by the "current" pointer
22
* without having to do pointer masking.
23
*/
24
struct
thread_info
{
25
struct
task_struct
*
task
;
/* XXX not really needed, except for dup_task_struct() */
26
struct
exec_domain
*
exec_domain
;
/* execution domain */
27
__u32
flags
;
/* thread_info flags (see TIF_*) */
28
__u32
cpu
;
/* current CPU */
29
__u32
last_cpu
;
/* Last CPU thread ran on */
30
__u32
status
;
/* Thread synchronous flags */
31
mm_segment_t
addr_limit
;
/* user-level address space limit */
32
int
preempt_count
;
/* 0=premptable, <0=BUG; will also serve as bh-counter */
33
struct
restart_block
restart_block
;
34
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
35
__u64
ac_stamp;
36
__u64
ac_leave;
37
__u64
ac_stime;
38
__u64
ac_utime;
39
#endif
40
};
41
42
#define THREAD_SIZE KERNEL_STACK_SIZE
43
44
#define INIT_THREAD_INFO(tsk) \
45
{ \
46
.task = &tsk, \
47
.exec_domain = &default_exec_domain, \
48
.flags = 0, \
49
.cpu = 0, \
50
.addr_limit = KERNEL_DS, \
51
.preempt_count = INIT_PREEMPT_COUNT, \
52
.restart_block = { \
53
.fn = do_no_restart_syscall, \
54
}, \
55
}
56
57
#ifndef ASM_OFFSETS_C
58
/* how to get the thread information struct from C */
59
#define current_thread_info() ((struct thread_info *) ((char *) current + IA64_TASK_SIZE))
60
#define alloc_thread_info_node(tsk, node) \
61
((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
62
#define task_thread_info(tsk) ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
63
#else
64
#define current_thread_info() ((struct thread_info *) 0)
65
#define alloc_thread_info_node(tsk, node) ((struct thread_info *) 0)
66
#define task_thread_info(tsk) ((struct thread_info *) 0)
67
#endif
68
#define free_thread_info(ti)
/* nothing */
69
#define task_stack_page(tsk) ((void *)(tsk))
70
71
#define __HAVE_THREAD_FUNCTIONS
72
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
73
#define setup_thread_stack(p, org) \
74
*task_thread_info(p) = *task_thread_info(org); \
75
task_thread_info(p)->ac_stime = 0; \
76
task_thread_info(p)->ac_utime = 0; \
77
task_thread_info(p)->task = (p);
78
#else
79
#define setup_thread_stack(p, org) \
80
*task_thread_info(p) = *task_thread_info(org); \
81
task_thread_info(p)->task = (p);
82
#endif
83
#define end_of_stack(p) (unsigned long *)((void *)(p) + IA64_RBS_OFFSET)
84
85
#define alloc_task_struct_node(node) \
86
({ \
87
struct page *page = alloc_pages_node(node, GFP_KERNEL | __GFP_COMP, \
88
KERNEL_STACK_SIZE_ORDER); \
89
struct task_struct *ret = page ? page_address(page) : NULL; \
90
\
91
ret; \
92
})
93
#define free_task_struct(tsk) free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER)
94
95
#endif
/* !__ASSEMBLY */
96
97
/*
98
* thread information flags
99
* - these are process state flags that various assembly files may need to access
100
* - pending work-to-be-done flags are in least-significant 16 bits, other flags
101
* in top 16 bits
102
*/
103
#define TIF_SIGPENDING 0
/* signal pending */
104
#define TIF_NEED_RESCHED 1
/* rescheduling necessary */
105
#define TIF_SYSCALL_TRACE 2
/* syscall trace active */
106
#define TIF_SYSCALL_AUDIT 3
/* syscall auditing active */
107
#define TIF_SINGLESTEP 4
/* restore singlestep on return to user mode */
108
#define TIF_NOTIFY_RESUME 6
/* resumption notification requested */
109
#define TIF_MEMDIE 17
/* is terminating due to OOM killer */
110
#define TIF_MCA_INIT 18
/* this task is processing MCA or INIT */
111
#define TIF_DB_DISABLED 19
/* debug trap disabled for fsyscall */
112
#define TIF_RESTORE_RSE 21
/* user RBS is newer than kernel RBS */
113
114
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
115
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
116
#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
117
#define _TIF_SYSCALL_TRACEAUDIT (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP)
118
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
119
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
120
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
121
#define _TIF_MCA_INIT (1 << TIF_MCA_INIT)
122
#define _TIF_DB_DISABLED (1 << TIF_DB_DISABLED)
123
#define _TIF_RESTORE_RSE (1 << TIF_RESTORE_RSE)
124
125
/* "work to do on user-return" bits */
126
#define TIF_ALLWORK_MASK (_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SYSCALL_AUDIT|\
127
_TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE)
128
/* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE or TIF_SYSCALL_AUDIT */
129
#define TIF_WORK_MASK (TIF_ALLWORK_MASK&~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT))
130
131
#define TS_POLLING 1
/* true if in idle loop and not sleeping */
132
#define TS_RESTORE_SIGMASK 2
/* restore signal mask in do_signal() */
133
134
#define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING)
135
136
#ifndef __ASSEMBLY__
137
#define HAVE_SET_RESTORE_SIGMASK 1
138
static
inline
void
set_restore_sigmask(
void
)
139
{
140
struct
thread_info
*ti =
current_thread_info
();
141
ti->
status
|=
TS_RESTORE_SIGMASK
;
142
WARN_ON
(!
test_bit
(
TIF_SIGPENDING
, &ti->
flags
));
143
}
144
static
inline
void
clear_restore_sigmask(
void
)
145
{
146
current_thread_info
()->status &= ~
TS_RESTORE_SIGMASK
;
147
}
148
static
inline
bool
test_restore_sigmask(
void
)
149
{
150
return
current_thread_info
()->status &
TS_RESTORE_SIGMASK
;
151
}
152
static
inline
bool
test_and_clear_restore_sigmask(
void
)
153
{
154
struct
thread_info
*ti =
current_thread_info
();
155
if
(!(ti->
status
&
TS_RESTORE_SIGMASK
))
156
return
false
;
157
ti->
status
&= ~
TS_RESTORE_SIGMASK
;
158
return
true
;
159
}
160
#endif
/* !__ASSEMBLY__ */
161
162
#endif
/* _ASM_IA64_THREAD_INFO_H */
Generated on Thu Jan 10 2013 12:50:39 for Linux Kernel by
1.8.2