| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _LINUX__INIT_TASK_H | 
|  | 2 | #define _LINUX__INIT_TASK_H | 
|  | 3 |  | 
| Dipankar Sarma | ab2af1f | 2005-09-09 13:04:13 -0700 | [diff] [blame] | 4 | #include <linux/rcupdate.h> | 
| Ingo Molnar | de30a2b | 2006-07-03 00:24:42 -0700 | [diff] [blame] | 5 | #include <linux/irqflags.h> | 
| Serge E. Hallyn | 4865ecf | 2006-10-02 02:18:14 -0700 | [diff] [blame] | 6 | #include <linux/utsname.h> | 
| Ingo Molnar | fbb9ce95 | 2006-07-03 00:24:50 -0700 | [diff] [blame] | 7 | #include <linux/lockdep.h> | 
| Kirill Korotaev | 73ea413 | 2006-10-02 02:18:20 -0700 | [diff] [blame] | 8 | #include <linux/ipc.h> | 
| Cedric Le Goater | 9a575a9 | 2006-12-08 02:37:59 -0800 | [diff] [blame] | 9 | #include <linux/pid_namespace.h> | 
| Cedric Le Goater | acce292 | 2007-07-15 23:40:59 -0700 | [diff] [blame] | 10 | #include <linux/user_namespace.h> | 
| Andrew G. Morgan | 3898b1b | 2008-04-28 02:13:40 -0700 | [diff] [blame] | 11 | #include <linux/securebits.h> | 
| Eric W. Biederman | 772698f | 2007-09-12 11:55:17 +0200 | [diff] [blame] | 12 | #include <net/net_namespace.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 13 |  | 
| Al Viro | f52111b | 2008-05-08 18:19:16 -0400 | [diff] [blame] | 14 | extern struct files_struct init_files; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 15 |  | 
|  | 16 | #define INIT_KIOCTX(name, which_mm) \ | 
|  | 17 | {							\ | 
|  | 18 | .users		= ATOMIC_INIT(1),		\ | 
|  | 19 | .dead		= 0,				\ | 
|  | 20 | .mm		= &which_mm,			\ | 
|  | 21 | .user_id	= 0,				\ | 
|  | 22 | .next		= NULL,				\ | 
|  | 23 | .wait		= __WAIT_QUEUE_HEAD_INITIALIZER(name.wait), \ | 
| Ingo Molnar | e4d9191 | 2006-07-03 00:24:34 -0700 | [diff] [blame] | 24 | .ctx_lock	= __SPIN_LOCK_UNLOCKED(name.ctx_lock), \ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 25 | .reqs_active	= 0U,				\ | 
|  | 26 | .max_reqs	= ~0U,				\ | 
|  | 27 | } | 
|  | 28 |  | 
|  | 29 | #define INIT_MM(name) \ | 
|  | 30 | {			 					\ | 
|  | 31 | .mm_rb		= RB_ROOT,				\ | 
|  | 32 | .pgd		= swapper_pg_dir, 			\ | 
|  | 33 | .mm_users	= ATOMIC_INIT(2), 			\ | 
|  | 34 | .mm_count	= ATOMIC_INIT(1), 			\ | 
|  | 35 | .mmap_sem	= __RWSEM_INITIALIZER(name.mmap_sem),	\ | 
| Ingo Molnar | e4d9191 | 2006-07-03 00:24:34 -0700 | [diff] [blame] | 36 | .page_table_lock =  __SPIN_LOCK_UNLOCKED(name.page_table_lock),	\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 | .mmlist		= LIST_HEAD_INIT(name.mmlist),		\ | 
|  | 38 | .cpu_vm_mask	= CPU_MASK_ALL,				\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 39 | } | 
|  | 40 |  | 
| Cedric Le Goater | 1ec320a | 2006-12-08 02:37:55 -0800 | [diff] [blame] | 41 | #define INIT_SIGNALS(sig) {						\ | 
|  | 42 | .count		= ATOMIC_INIT(1), 				\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 43 | .wait_chldexit	= __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\ | 
| Cedric Le Goater | 1ec320a | 2006-12-08 02:37:55 -0800 | [diff] [blame] | 44 | .shared_pending	= { 						\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 45 | .list = LIST_HEAD_INIT(sig.shared_pending.list),	\ | 
| Cedric Le Goater | 1ec320a | 2006-12-08 02:37:55 -0800 | [diff] [blame] | 46 | .signal =  {{0}}},					\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 | .posix_timers	 = LIST_HEAD_INIT(sig.posix_timers),		\ | 
|  | 48 | .cpu_timers	= INIT_CPU_TIMERS(sig.cpu_timers),		\ | 
|  | 49 | .rlim		= INIT_RLIMITS,					\ | 
|  | 50 | } | 
|  | 51 |  | 
| Serge E. Hallyn | ab51601 | 2006-10-02 02:18:06 -0700 | [diff] [blame] | 52 | extern struct nsproxy init_nsproxy; | 
|  | 53 | #define INIT_NSPROXY(nsproxy) {						\ | 
| Cedric Le Goater | 9a575a9 | 2006-12-08 02:37:59 -0800 | [diff] [blame] | 54 | .pid_ns		= &init_pid_ns,					\ | 
| Serge E. Hallyn | ab51601 | 2006-10-02 02:18:06 -0700 | [diff] [blame] | 55 | .count		= ATOMIC_INIT(1),				\ | 
| Serge E. Hallyn | 4865ecf | 2006-10-02 02:18:14 -0700 | [diff] [blame] | 56 | .uts_ns		= &init_uts_ns,					\ | 
| Kirill Korotaev | 6b3286e | 2006-12-08 02:37:56 -0800 | [diff] [blame] | 57 | .mnt_ns		= NULL,						\ | 
| Daniel Lezcano | 4fabcd7 | 2007-09-13 09:16:29 +0200 | [diff] [blame] | 58 | INIT_NET_NS(net_ns)                                             \ | 
| Kirill Korotaev | 73ea413 | 2006-10-02 02:18:20 -0700 | [diff] [blame] | 59 | INIT_IPC_NS(ipc_ns)						\ | 
| Cedric Le Goater | acce292 | 2007-07-15 23:40:59 -0700 | [diff] [blame] | 60 | .user_ns	= &init_user_ns,				\ | 
| Serge E. Hallyn | ab51601 | 2006-10-02 02:18:06 -0700 | [diff] [blame] | 61 | } | 
|  | 62 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 63 | #define INIT_SIGHAND(sighand) {						\ | 
|  | 64 | .count		= ATOMIC_INIT(1), 				\ | 
|  | 65 | .action		= { { { .sa_handler = NULL, } }, },		\ | 
| Ingo Molnar | e4d9191 | 2006-07-03 00:24:34 -0700 | [diff] [blame] | 66 | .siglock	= __SPIN_LOCK_UNLOCKED(sighand.siglock),	\ | 
| Davide Libenzi | b8fceee | 2007-09-20 12:40:16 -0700 | [diff] [blame] | 67 | .signalfd_wqh	= __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh),	\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 68 | } | 
|  | 69 |  | 
|  | 70 | extern struct group_info init_groups; | 
|  | 71 |  | 
| Sukadev Bhattiprolu | 820e45d | 2007-05-10 22:23:00 -0700 | [diff] [blame] | 72 | #define INIT_STRUCT_PID {						\ | 
|  | 73 | .count 		= ATOMIC_INIT(1),				\ | 
| Sukadev Bhattiprolu | 820e45d | 2007-05-10 22:23:00 -0700 | [diff] [blame] | 74 | .tasks		= {						\ | 
|  | 75 | { .first = &init_task.pids[PIDTYPE_PID].node },		\ | 
|  | 76 | { .first = &init_task.pids[PIDTYPE_PGID].node },	\ | 
|  | 77 | { .first = &init_task.pids[PIDTYPE_SID].node },		\ | 
|  | 78 | },								\ | 
|  | 79 | .rcu		= RCU_HEAD_INIT,				\ | 
| Sukadev Bhattiprolu | 4c3f2ea | 2007-10-18 23:40:03 -0700 | [diff] [blame] | 80 | .level		= 0,						\ | 
|  | 81 | .numbers	= { {						\ | 
|  | 82 | .nr		= 0,					\ | 
|  | 83 | .ns		= &init_pid_ns,				\ | 
|  | 84 | .pid_chain	= { .next = NULL, .pprev = NULL },	\ | 
|  | 85 | }, }								\ | 
| Sukadev Bhattiprolu | 820e45d | 2007-05-10 22:23:00 -0700 | [diff] [blame] | 86 | } | 
|  | 87 |  | 
|  | 88 | #define INIT_PID_LINK(type) 					\ | 
|  | 89 | {								\ | 
|  | 90 | .node = {						\ | 
|  | 91 | .next = NULL,					\ | 
|  | 92 | .pprev = &init_struct_pid.tasks[type].first,	\ | 
|  | 93 | },							\ | 
|  | 94 | .pid = &init_struct_pid,				\ | 
|  | 95 | } | 
|  | 96 |  | 
| Al Viro | bfef93a | 2008-01-10 04:53:18 -0500 | [diff] [blame] | 97 | #ifdef CONFIG_AUDITSYSCALL | 
|  | 98 | #define INIT_IDS \ | 
| Eric Paris | 4746ec5 | 2008-01-08 10:06:53 -0500 | [diff] [blame] | 99 | .loginuid = -1, \ | 
|  | 100 | .sessionid = -1, | 
| Al Viro | bfef93a | 2008-01-10 04:53:18 -0500 | [diff] [blame] | 101 | #else | 
|  | 102 | #define INIT_IDS | 
|  | 103 | #endif | 
| Serge E. Hallyn | 3b7391d | 2008-02-04 22:29:45 -0800 | [diff] [blame] | 104 |  | 
|  | 105 | #ifdef CONFIG_SECURITY_FILE_CAPABILITIES | 
|  | 106 | /* | 
|  | 107 | * Because of the reduced scope of CAP_SETPCAP when filesystem | 
|  | 108 | * capabilities are in effect, it is safe to allow CAP_SETPCAP to | 
|  | 109 | * be available in the default configuration. | 
|  | 110 | */ | 
|  | 111 | # define CAP_INIT_BSET  CAP_FULL_SET | 
|  | 112 | #else | 
|  | 113 | # define CAP_INIT_BSET  CAP_INIT_EFF_SET | 
|  | 114 | #endif | 
|  | 115 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 116 | /* | 
|  | 117 | *  INIT_TASK is used to set up the first task table, touch at | 
|  | 118 | * your own risk!. Base=0, limit=0x1fffff (=2MB) | 
|  | 119 | */ | 
|  | 120 | #define INIT_TASK(tsk)	\ | 
|  | 121 | {									\ | 
|  | 122 | .state		= 0,						\ | 
| Roman Zippel | f7e4217 | 2007-05-09 02:35:17 -0700 | [diff] [blame] | 123 | .stack		= &init_thread_info,				\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 124 | .usage		= ATOMIC_INIT(2),				\ | 
|  | 125 | .flags		= 0,						\ | 
|  | 126 | .lock_depth	= -1,						\ | 
|  | 127 | .prio		= MAX_PRIO-20,					\ | 
|  | 128 | .static_prio	= MAX_PRIO-20,					\ | 
| Ingo Molnar | b29739f | 2006-06-27 02:54:51 -0700 | [diff] [blame] | 129 | .normal_prio	= MAX_PRIO-20,					\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 130 | .policy		= SCHED_NORMAL,					\ | 
|  | 131 | .cpus_allowed	= CPU_MASK_ALL,					\ | 
|  | 132 | .mm		= NULL,						\ | 
|  | 133 | .active_mm	= &init_mm,					\ | 
| Peter Zijlstra | 4a55bd5 | 2008-04-19 19:45:00 +0200 | [diff] [blame] | 134 | .se		= {						\ | 
|  | 135 | .group_node 	= LIST_HEAD_INIT(tsk.se.group_node),	\ | 
|  | 136 | },								\ | 
| Peter Zijlstra | fa71706 | 2008-01-25 21:08:27 +0100 | [diff] [blame] | 137 | .rt		= {						\ | 
|  | 138 | .run_list	= LIST_HEAD_INIT(tsk.rt.run_list),	\ | 
| Peter Zijlstra | 6f505b1 | 2008-01-25 21:08:30 +0100 | [diff] [blame] | 139 | .time_slice	= HZ, 					\ | 
|  | 140 | .nr_cpus_allowed = NR_CPUS,				\ | 
|  | 141 | },								\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 142 | .tasks		= LIST_HEAD_INIT(tsk.tasks),			\ | 
|  | 143 | .ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children),		\ | 
|  | 144 | .ptrace_list	= LIST_HEAD_INIT(tsk.ptrace_list),		\ | 
|  | 145 | .real_parent	= &tsk,						\ | 
|  | 146 | .parent		= &tsk,						\ | 
|  | 147 | .children	= LIST_HEAD_INIT(tsk.children),			\ | 
|  | 148 | .sibling	= LIST_HEAD_INIT(tsk.sibling),			\ | 
|  | 149 | .group_leader	= &tsk,						\ | 
|  | 150 | .group_info	= &init_groups,					\ | 
|  | 151 | .cap_effective	= CAP_INIT_EFF_SET,				\ | 
|  | 152 | .cap_inheritable = CAP_INIT_INH_SET,				\ | 
|  | 153 | .cap_permitted	= CAP_FULL_SET,					\ | 
| Serge E. Hallyn | 3b7391d | 2008-02-04 22:29:45 -0800 | [diff] [blame] | 154 | .cap_bset 	= CAP_INIT_BSET,				\ | 
| Andrew G. Morgan | 3898b1b | 2008-04-28 02:13:40 -0700 | [diff] [blame] | 155 | .securebits     = SECUREBITS_DEFAULT,				\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 156 | .user		= INIT_USER,					\ | 
|  | 157 | .comm		= "swapper",					\ | 
|  | 158 | .thread		= INIT_THREAD,					\ | 
|  | 159 | .fs		= &init_fs,					\ | 
|  | 160 | .files		= &init_files,					\ | 
|  | 161 | .signal		= &init_signals,				\ | 
|  | 162 | .sighand	= &init_sighand,				\ | 
| Serge E. Hallyn | ab51601 | 2006-10-02 02:18:06 -0700 | [diff] [blame] | 163 | .nsproxy	= &init_nsproxy,				\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 164 | .pending	= {						\ | 
|  | 165 | .list = LIST_HEAD_INIT(tsk.pending.list),		\ | 
|  | 166 | .signal = {{0}}},					\ | 
|  | 167 | .blocked	= {{0}},					\ | 
| Ingo Molnar | e4d9191 | 2006-07-03 00:24:34 -0700 | [diff] [blame] | 168 | .alloc_lock	= __SPIN_LOCK_UNLOCKED(tsk.alloc_lock),		\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 169 | .journal_info	= NULL,						\ | 
|  | 170 | .cpu_timers	= INIT_CPU_TIMERS(tsk.cpu_timers),		\ | 
| Jens Axboe | 22e2c50 | 2005-06-27 10:55:12 +0200 | [diff] [blame] | 171 | .fs_excl	= ATOMIC_INIT(0),				\ | 
| Milind Arun Choudhary | b32e41b | 2007-05-08 00:30:08 -0700 | [diff] [blame] | 172 | .pi_lock	= __SPIN_LOCK_UNLOCKED(tsk.pi_lock),		\ | 
| Sukadev Bhattiprolu | 820e45d | 2007-05-10 22:23:00 -0700 | [diff] [blame] | 173 | .pids = {							\ | 
|  | 174 | [PIDTYPE_PID]  = INIT_PID_LINK(PIDTYPE_PID),		\ | 
|  | 175 | [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID),		\ | 
|  | 176 | [PIDTYPE_SID]  = INIT_PID_LINK(PIDTYPE_SID),		\ | 
|  | 177 | },								\ | 
| Peter Zijlstra | 3e26c14 | 2007-10-16 23:25:50 -0700 | [diff] [blame] | 178 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties),			\ | 
| Al Viro | bfef93a | 2008-01-10 04:53:18 -0500 | [diff] [blame] | 179 | INIT_IDS							\ | 
| Ingo Molnar | de30a2b | 2006-07-03 00:24:42 -0700 | [diff] [blame] | 180 | INIT_TRACE_IRQFLAGS						\ | 
| Ingo Molnar | fbb9ce95 | 2006-07-03 00:24:50 -0700 | [diff] [blame] | 181 | INIT_LOCKDEP							\ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 182 | } | 
|  | 183 |  | 
|  | 184 |  | 
|  | 185 | #define INIT_CPU_TIMERS(cpu_timers)					\ | 
|  | 186 | {									\ | 
|  | 187 | LIST_HEAD_INIT(cpu_timers[0]),					\ | 
|  | 188 | LIST_HEAD_INIT(cpu_timers[1]),					\ | 
|  | 189 | LIST_HEAD_INIT(cpu_timers[2]),					\ | 
|  | 190 | } | 
|  | 191 |  | 
|  | 192 |  | 
|  | 193 | #endif |