diff options
Diffstat (limited to 'include/linux/init_task.h')
| -rw-r--r-- | include/linux/init_task.h | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index f00253b3fc47..caa151fbebb7 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
| @@ -12,11 +12,18 @@ | |||
| 12 | #include <linux/securebits.h> | 12 | #include <linux/securebits.h> |
| 13 | #include <net/net_namespace.h> | 13 | #include <net/net_namespace.h> |
| 14 | 14 | ||
| 15 | #ifdef CONFIG_SMP | ||
| 16 | # define INIT_PUSHABLE_TASKS(tsk) \ | ||
| 17 | .pushable_tasks = PLIST_NODE_INIT(tsk.pushable_tasks, MAX_PRIO), | ||
| 18 | #else | ||
| 19 | # define INIT_PUSHABLE_TASKS(tsk) | ||
| 20 | #endif | ||
| 21 | |||
| 15 | extern struct files_struct init_files; | 22 | extern struct files_struct init_files; |
| 16 | extern struct fs_struct init_fs; | 23 | extern struct fs_struct init_fs; |
| 17 | 24 | ||
| 18 | #define INIT_SIGNALS(sig) { \ | 25 | #define INIT_SIGNALS(sig) { \ |
| 19 | .count = ATOMIC_INIT(1), \ | 26 | .nr_threads = 1, \ |
| 20 | .wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\ | 27 | .wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\ |
| 21 | .shared_pending = { \ | 28 | .shared_pending = { \ |
| 22 | .list = LIST_HEAD_INIT(sig.shared_pending.list), \ | 29 | .list = LIST_HEAD_INIT(sig.shared_pending.list), \ |
| @@ -29,21 +36,15 @@ extern struct fs_struct init_fs; | |||
| 29 | .running = 0, \ | 36 | .running = 0, \ |
| 30 | .lock = __SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \ | 37 | .lock = __SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \ |
| 31 | }, \ | 38 | }, \ |
| 39 | .cred_guard_mutex = \ | ||
| 40 | __MUTEX_INITIALIZER(sig.cred_guard_mutex), \ | ||
| 32 | } | 41 | } |
| 33 | 42 | ||
| 34 | extern struct nsproxy init_nsproxy; | 43 | extern struct nsproxy init_nsproxy; |
| 35 | #define INIT_NSPROXY(nsproxy) { \ | ||
| 36 | .pid_ns = &init_pid_ns, \ | ||
| 37 | .count = ATOMIC_INIT(1), \ | ||
| 38 | .uts_ns = &init_uts_ns, \ | ||
| 39 | .mnt_ns = NULL, \ | ||
| 40 | INIT_NET_NS(net_ns) \ | ||
| 41 | INIT_IPC_NS(ipc_ns) \ | ||
| 42 | } | ||
| 43 | 44 | ||
| 44 | #define INIT_SIGHAND(sighand) { \ | 45 | #define INIT_SIGHAND(sighand) { \ |
| 45 | .count = ATOMIC_INIT(1), \ | 46 | .count = ATOMIC_INIT(1), \ |
| 46 | .action = { { { .sa_handler = NULL, } }, }, \ | 47 | .action = { { { .sa_handler = SIG_DFL, } }, }, \ |
| 47 | .siglock = __SPIN_LOCK_UNLOCKED(sighand.siglock), \ | 48 | .siglock = __SPIN_LOCK_UNLOCKED(sighand.siglock), \ |
| 48 | .signalfd_wqh = __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh), \ | 49 | .signalfd_wqh = __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh), \ |
| 49 | } | 50 | } |
| @@ -53,11 +54,10 @@ extern struct group_info init_groups; | |||
| 53 | #define INIT_STRUCT_PID { \ | 54 | #define INIT_STRUCT_PID { \ |
| 54 | .count = ATOMIC_INIT(1), \ | 55 | .count = ATOMIC_INIT(1), \ |
| 55 | .tasks = { \ | 56 | .tasks = { \ |
| 56 | { .first = &init_task.pids[PIDTYPE_PID].node }, \ | 57 | { .first = NULL }, \ |
| 57 | { .first = &init_task.pids[PIDTYPE_PGID].node }, \ | 58 | { .first = NULL }, \ |
| 58 | { .first = &init_task.pids[PIDTYPE_SID].node }, \ | 59 | { .first = NULL }, \ |
| 59 | }, \ | 60 | }, \ |
| 60 | .rcu = RCU_HEAD_INIT, \ | ||
| 61 | .level = 0, \ | 61 | .level = 0, \ |
| 62 | .numbers = { { \ | 62 | .numbers = { { \ |
| 63 | .nr = 0, \ | 63 | .nr = 0, \ |
| @@ -70,7 +70,7 @@ extern struct group_info init_groups; | |||
| 70 | { \ | 70 | { \ |
| 71 | .node = { \ | 71 | .node = { \ |
| 72 | .next = NULL, \ | 72 | .next = NULL, \ |
| 73 | .pprev = &init_struct_pid.tasks[type].first, \ | 73 | .pprev = NULL, \ |
| 74 | }, \ | 74 | }, \ |
| 75 | .pid = &init_struct_pid, \ | 75 | .pid = &init_struct_pid, \ |
| 76 | } | 76 | } |
| @@ -90,12 +90,25 @@ extern struct group_info init_groups; | |||
| 90 | */ | 90 | */ |
| 91 | # define CAP_INIT_BSET CAP_FULL_SET | 91 | # define CAP_INIT_BSET CAP_FULL_SET |
| 92 | 92 | ||
| 93 | #ifdef CONFIG_RCU_BOOST | ||
| 94 | #define INIT_TASK_RCU_BOOST() \ | ||
| 95 | .rcu_boost_mutex = NULL, | ||
| 96 | #else | ||
| 97 | #define INIT_TASK_RCU_BOOST() | ||
| 98 | #endif | ||
| 93 | #ifdef CONFIG_TREE_PREEMPT_RCU | 99 | #ifdef CONFIG_TREE_PREEMPT_RCU |
| 100 | #define INIT_TASK_RCU_TREE_PREEMPT() \ | ||
| 101 | .rcu_blocked_node = NULL, | ||
| 102 | #else | ||
| 103 | #define INIT_TASK_RCU_TREE_PREEMPT(tsk) | ||
| 104 | #endif | ||
| 105 | #ifdef CONFIG_PREEMPT_RCU | ||
| 94 | #define INIT_TASK_RCU_PREEMPT(tsk) \ | 106 | #define INIT_TASK_RCU_PREEMPT(tsk) \ |
| 95 | .rcu_read_lock_nesting = 0, \ | 107 | .rcu_read_lock_nesting = 0, \ |
| 96 | .rcu_read_unlock_special = 0, \ | 108 | .rcu_read_unlock_special = 0, \ |
| 97 | .rcu_blocked_node = NULL, \ | 109 | .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), \ |
| 98 | .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), | 110 | INIT_TASK_RCU_TREE_PREEMPT() \ |
| 111 | INIT_TASK_RCU_BOOST() | ||
| 99 | #else | 112 | #else |
| 100 | #define INIT_TASK_RCU_PREEMPT(tsk) | 113 | #define INIT_TASK_RCU_PREEMPT(tsk) |
| 101 | #endif | 114 | #endif |
| @@ -138,7 +151,7 @@ extern struct cred init_cred; | |||
| 138 | .nr_cpus_allowed = NR_CPUS, \ | 151 | .nr_cpus_allowed = NR_CPUS, \ |
| 139 | }, \ | 152 | }, \ |
| 140 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ | 153 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ |
| 141 | .pushable_tasks = PLIST_NODE_INIT(tsk.pushable_tasks, MAX_PRIO), \ | 154 | INIT_PUSHABLE_TASKS(tsk) \ |
| 142 | .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ | 155 | .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ |
| 143 | .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ | 156 | .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ |
| 144 | .real_parent = &tsk, \ | 157 | .real_parent = &tsk, \ |
| @@ -146,10 +159,8 @@ extern struct cred init_cred; | |||
| 146 | .children = LIST_HEAD_INIT(tsk.children), \ | 159 | .children = LIST_HEAD_INIT(tsk.children), \ |
| 147 | .sibling = LIST_HEAD_INIT(tsk.sibling), \ | 160 | .sibling = LIST_HEAD_INIT(tsk.sibling), \ |
| 148 | .group_leader = &tsk, \ | 161 | .group_leader = &tsk, \ |
| 149 | .real_cred = &init_cred, \ | 162 | RCU_INIT_POINTER(.real_cred, &init_cred), \ |
| 150 | .cred = &init_cred, \ | 163 | RCU_INIT_POINTER(.cred, &init_cred), \ |
| 151 | .cred_guard_mutex = \ | ||
| 152 | __MUTEX_INITIALIZER(tsk.cred_guard_mutex), \ | ||
| 153 | .comm = "swapper", \ | 164 | .comm = "swapper", \ |
| 154 | .thread = INIT_THREAD, \ | 165 | .thread = INIT_THREAD, \ |
| 155 | .fs = &init_fs, \ | 166 | .fs = &init_fs, \ |
| @@ -172,6 +183,7 @@ extern struct cred init_cred; | |||
| 172 | [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ | 183 | [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ |
| 173 | [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \ | 184 | [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \ |
| 174 | }, \ | 185 | }, \ |
| 186 | .thread_group = LIST_HEAD_INIT(tsk.thread_group), \ | ||
| 175 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ | 187 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ |
| 176 | INIT_IDS \ | 188 | INIT_IDS \ |
| 177 | INIT_PERF_EVENTS(tsk) \ | 189 | INIT_PERF_EVENTS(tsk) \ |
