aboutsummaryrefslogtreecommitdiffstats
path: root/init/init_task.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2018-01-02 15:12:01 +0000
committerDavid Howells <dhowells@redhat.com>2018-01-17 11:30:16 +0000
commitd11ed3ab3166a2bfad60681aebf3e13e1c3408a9 (patch)
tree9554041f207fc79493f17b92e88d2dcebd107e94 /init/init_task.c
parentConstruct init thread stack in the linker script rather than by union (diff)
downloadlinux-dev-d11ed3ab3166a2bfad60681aebf3e13e1c3408a9.tar.xz
linux-dev-d11ed3ab3166a2bfad60681aebf3e13e1c3408a9.zip
Expand INIT_TASK() in init/init_task.c and remove
It's no longer necessary to have an INIT_TASK() macro, and this can be expanded into the one place it is now used and removed. Signed-off-by: David Howells <dhowells@redhat.com> Tested-by: Tony Luck <tony.luck@intel.com> Tested-by: Will Deacon <will.deacon@arm.com> (arm64) Tested-by: Palmer Dabbelt <palmer@sifive.com> Acked-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'init/init_task.c')
-rw-r--r--init/init_task.c85
1 files changed, 83 insertions, 2 deletions
diff --git a/init/init_task.c b/init/init_task.c
index 2285aa42cbe1..7b2436f02dad 100644
--- a/init/init_task.c
+++ b/init/init_task.c
@@ -16,12 +16,93 @@
static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
-/* Initial task structure */
+
+/*
+ * Set up the first task table, touch at your own risk!. Base=0,
+ * limit=0x1fffff (=2MB)
+ */
struct task_struct init_task
#ifdef CONFIG_ARCH_TASK_STRUCT_ON_STACK
__init_task_data
#endif
- = INIT_TASK(init_task);
+= {
+ INIT_TASK_TI(init_task)
+ .state = 0,
+ .stack = init_stack,
+ .usage = ATOMIC_INIT(2),
+ .flags = PF_KTHREAD,
+ .prio = MAX_PRIO-20,
+ .static_prio = MAX_PRIO-20,
+ .normal_prio = MAX_PRIO-20,
+ .policy = SCHED_NORMAL,
+ .cpus_allowed = CPU_MASK_ALL,
+ .nr_cpus_allowed= NR_CPUS,
+ .mm = NULL,
+ .active_mm = &init_mm,
+ .restart_block = {
+ .fn = do_no_restart_syscall,
+ },
+ .se = {
+ .group_node = LIST_HEAD_INIT(init_task.se.group_node),
+ },
+ .rt = {
+ .run_list = LIST_HEAD_INIT(init_task.rt.run_list),
+ .time_slice = RR_TIMESLICE,
+ },
+ .tasks = LIST_HEAD_INIT(init_task.tasks),
+ INIT_PUSHABLE_TASKS(init_task)
+ INIT_CGROUP_SCHED(init_task)
+ .ptraced = LIST_HEAD_INIT(init_task.ptraced),
+ .ptrace_entry = LIST_HEAD_INIT(init_task.ptrace_entry),
+ .real_parent = &init_task,
+ .parent = &init_task,
+ .children = LIST_HEAD_INIT(init_task.children),
+ .sibling = LIST_HEAD_INIT(init_task.sibling),
+ .group_leader = &init_task,
+ RCU_POINTER_INITIALIZER(real_cred, &init_cred),
+ RCU_POINTER_INITIALIZER(cred, &init_cred),
+ .comm = INIT_TASK_COMM,
+ .thread = INIT_THREAD,
+ .fs = &init_fs,
+ .files = &init_files,
+ .signal = &init_signals,
+ .sighand = &init_sighand,
+ .nsproxy = &init_nsproxy,
+ .pending = {
+ .list = LIST_HEAD_INIT(init_task.pending.list),
+ .signal = {{0}}
+ },
+ .blocked = {{0}},
+ .alloc_lock = __SPIN_LOCK_UNLOCKED(init_task.alloc_lock),
+ .journal_info = NULL,
+ INIT_CPU_TIMERS(init_task)
+ .pi_lock = __RAW_SPIN_LOCK_UNLOCKED(init_task.pi_lock),
+ .timer_slack_ns = 50000, /* 50 usec default slack */
+ .pids = {
+ [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID),
+ [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID),
+ [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID),
+ },
+ .thread_group = LIST_HEAD_INIT(init_task.thread_group),
+ .thread_node = LIST_HEAD_INIT(init_signals.thread_head),
+ INIT_IDS
+ INIT_PERF_EVENTS(init_task)
+ INIT_TRACE_IRQFLAGS
+ INIT_LOCKDEP
+ INIT_FTRACE_GRAPH
+ INIT_TRACE_RECURSION
+ INIT_TASK_RCU_PREEMPT(init_task)
+ INIT_TASK_RCU_TASKS(init_task)
+ INIT_CPUSET_SEQ(init_task)
+ INIT_RT_MUTEXES(init_task)
+ INIT_PREV_CPUTIME(init_task)
+ INIT_VTIME(init_task)
+ INIT_NUMA_BALANCING(init_task)
+ INIT_KASAN(init_task)
+ INIT_LIVEPATCH(init_task)
+ INIT_TASK_SECURITY
+};
+
EXPORT_SYMBOL(init_task);
/*