|
@@ -88,6 +88,28 @@ extern struct nsproxy init_nsproxy;
|
|
|
|
|
|
extern struct group_info init_groups;
|
|
|
|
|
|
+#define INIT_STRUCT_PID { \
|
|
|
+ .count = ATOMIC_INIT(1), \
|
|
|
+ .nr = 0, \
|
|
|
+ /* Don't put this struct pid in pid_hash */ \
|
|
|
+ .pid_chain = { .next = NULL, .pprev = NULL }, \
|
|
|
+ .tasks = { \
|
|
|
+ { .first = &init_task.pids[PIDTYPE_PID].node }, \
|
|
|
+ { .first = &init_task.pids[PIDTYPE_PGID].node }, \
|
|
|
+ { .first = &init_task.pids[PIDTYPE_SID].node }, \
|
|
|
+ }, \
|
|
|
+ .rcu = RCU_HEAD_INIT, \
|
|
|
+}
|
|
|
+
|
|
|
+#define INIT_PID_LINK(type) \
|
|
|
+{ \
|
|
|
+ .node = { \
|
|
|
+ .next = NULL, \
|
|
|
+ .pprev = &init_struct_pid.tasks[type].first, \
|
|
|
+ }, \
|
|
|
+ .pid = &init_struct_pid, \
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* INIT_TASK is used to set up the first task table, touch at
|
|
|
* your own risk!. Base=0, limit=0x1fffff (=2MB)
|
|
@@ -139,6 +161,11 @@ extern struct group_info init_groups;
|
|
|
.cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \
|
|
|
.fs_excl = ATOMIC_INIT(0), \
|
|
|
.pi_lock = __SPIN_LOCK_UNLOCKED(tsk.pi_lock), \
|
|
|
+ .pids = { \
|
|
|
+ [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID), \
|
|
|
+ [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \
|
|
|
+ [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \
|
|
|
+ }, \
|
|
|
INIT_TRACE_IRQFLAGS \
|
|
|
INIT_LOCKDEP \
|
|
|
}
|