Blame view

init/init_task.c 5.19 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  // SPDX-License-Identifier: GPL-2.0
a4a2eb490   Thomas Gleixner   init_task: Create...
2
3
4
5
  #include <linux/init_task.h>
  #include <linux/export.h>
  #include <linux/mqueue.h>
  #include <linux/sched.h>
cf4aebc29   Clark Williams   sched: Move sched...
6
  #include <linux/sched/sysctl.h>
8bd75c77b   Clark Williams   sched/rt: Move rt...
7
  #include <linux/sched/rt.h>
9164bb4a1   Ingo Molnar   sched/headers: Pr...
8
  #include <linux/sched/task.h>
a4a2eb490   Thomas Gleixner   init_task: Create...
9
10
11
  #include <linux/init.h>
  #include <linux/fs.h>
  #include <linux/mm.h>
f0b752168   Richard Guy Briggs   audit: convert se...
12
  #include <linux/audit.h>
a4a2eb490   Thomas Gleixner   init_task: Create...
13
14
  
  #include <asm/pgtable.h>
7c0f6ba68   Linus Torvalds   Replace <asm/uacc...
15
  #include <linux/uaccess.h>
a4a2eb490   Thomas Gleixner   init_task: Create...
16

3678e2fcc   David Howells   Expand the INIT_S...
17
18
19
20
21
22
23
24
  static struct signal_struct init_signals = {
  	.nr_threads	= 1,
  	.thread_head	= LIST_HEAD_INIT(init_task.thread_node),
  	.wait_chldexit	= __WAIT_QUEUE_HEAD_INITIALIZER(init_signals.wait_chldexit),
  	.shared_pending	= {
  		.list = LIST_HEAD_INIT(init_signals.shared_pending.list),
  		.signal =  {{0}}
  	},
c3ad2c3b0   Eric W. Biederman   signal: Don't res...
25
  	.multiprocess	= HLIST_HEAD_INIT,
3678e2fcc   David Howells   Expand the INIT_S...
26
27
28
29
30
31
32
33
34
35
36
  	.rlim		= INIT_RLIMITS,
  	.cred_guard_mutex = __MUTEX_INITIALIZER(init_signals.cred_guard_mutex),
  #ifdef CONFIG_POSIX_TIMERS
  	.posix_timers = LIST_HEAD_INIT(init_signals.posix_timers),
  	.cputimer	= {
  		.cputime_atomic	= INIT_CPUTIME_ATOMIC,
  		.running	= false,
  		.checking_timer = false,
  	},
  #endif
  	INIT_CPU_TIMERS(init_signals)
2c4704756   Eric W. Biederman   pids: Move the pg...
37
38
  	.pids = {
  		[PIDTYPE_PID]	= &init_struct_pid,
6883f81aa   Eric W. Biederman   pid: Implement PI...
39
  		[PIDTYPE_TGID]	= &init_struct_pid,
2c4704756   Eric W. Biederman   pids: Move the pg...
40
41
42
  		[PIDTYPE_PGID]	= &init_struct_pid,
  		[PIDTYPE_SID]	= &init_struct_pid,
  	},
3678e2fcc   David Howells   Expand the INIT_S...
43
44
45
46
47
48
49
50
51
  	INIT_PREV_CPUTIME(init_signals)
  };
  
  static struct sighand_struct init_sighand = {
  	.count		= ATOMIC_INIT(1),
  	.action		= { { { .sa_handler = SIG_DFL, } }, },
  	.siglock	= __SPIN_LOCK_UNLOCKED(init_sighand.siglock),
  	.signalfd_wqh	= __WAIT_QUEUE_HEAD_INITIALIZER(init_sighand.signalfd_wqh),
  };
a4a2eb490   Thomas Gleixner   init_task: Create...
52

d11ed3ab3   David Howells   Expand INIT_TASK(...
53
54
55
56
  /*
   * Set up the first task table, touch at your own risk!. Base=0,
   * limit=0x1fffff (=2MB)
   */
0500871f2   David Howells   Construct init th...
57
58
59
60
  struct task_struct init_task
  #ifdef CONFIG_ARCH_TASK_STRUCT_ON_STACK
  	__init_task_data
  #endif
d11ed3ab3   David Howells   Expand INIT_TASK(...
61
  = {
4e7e3adbb   David Howells   Expand various IN...
62
63
64
65
  #ifdef CONFIG_THREAD_INFO_IN_TASK
  	.thread_info	= INIT_THREAD_INFO(init_task),
  	.stack_refcount	= ATOMIC_INIT(1),
  #endif
d11ed3ab3   David Howells   Expand INIT_TASK(...
66
67
68
69
  	.state		= 0,
  	.stack		= init_stack,
  	.usage		= ATOMIC_INIT(2),
  	.flags		= PF_KTHREAD,
4e7e3adbb   David Howells   Expand various IN...
70
71
72
  	.prio		= MAX_PRIO - 20,
  	.static_prio	= MAX_PRIO - 20,
  	.normal_prio	= MAX_PRIO - 20,
d11ed3ab3   David Howells   Expand INIT_TASK(...
73
74
75
76
77
  	.policy		= SCHED_NORMAL,
  	.cpus_allowed	= CPU_MASK_ALL,
  	.nr_cpus_allowed= NR_CPUS,
  	.mm		= NULL,
  	.active_mm	= &init_mm,
4e7e3adbb   David Howells   Expand various IN...
78
  	.restart_block	= {
d11ed3ab3   David Howells   Expand INIT_TASK(...
79
80
81
82
83
84
85
86
87
88
  		.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),
4e7e3adbb   David Howells   Expand various IN...
89
90
91
92
93
94
  #ifdef CONFIG_SMP
  	.pushable_tasks	= PLIST_NODE_INIT(init_task.pushable_tasks, MAX_PRIO),
  #endif
  #ifdef CONFIG_CGROUP_SCHED
  	.sched_task_group = &root_task_group,
  #endif
d11ed3ab3   David Howells   Expand INIT_TASK(...
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  	.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 */
2c4704756   Eric W. Biederman   pids: Move the pg...
121
  	.thread_pid	= &init_struct_pid,
d11ed3ab3   David Howells   Expand INIT_TASK(...
122
123
  	.thread_group	= LIST_HEAD_INIT(init_task.thread_group),
  	.thread_node	= LIST_HEAD_INIT(init_signals.thread_head),
4e7e3adbb   David Howells   Expand various IN...
124
125
  #ifdef CONFIG_AUDITSYSCALL
  	.loginuid	= INVALID_UID,
f0b752168   Richard Guy Briggs   audit: convert se...
126
  	.sessionid	= AUDIT_SID_UNSET,
4e7e3adbb   David Howells   Expand various IN...
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
  #endif
  #ifdef CONFIG_PERF_EVENTS
  	.perf_event_mutex = __MUTEX_INITIALIZER(init_task.perf_event_mutex),
  	.perf_event_list = LIST_HEAD_INIT(init_task.perf_event_list),
  #endif
  #ifdef CONFIG_PREEMPT_RCU
  	.rcu_read_lock_nesting = 0,
  	.rcu_read_unlock_special.s = 0,
  	.rcu_node_entry = LIST_HEAD_INIT(init_task.rcu_node_entry),
  	.rcu_blocked_node = NULL,
  #endif
  #ifdef CONFIG_TASKS_RCU
  	.rcu_tasks_holdout = false,
  	.rcu_tasks_holdout_list = LIST_HEAD_INIT(init_task.rcu_tasks_holdout_list),
  	.rcu_tasks_idle_cpu = -1,
  #endif
  #ifdef CONFIG_CPUSETS
  	.mems_allowed_seq = SEQCNT_ZERO(init_task.mems_allowed_seq),
  #endif
  #ifdef CONFIG_RT_MUTEXES
  	.pi_waiters	= RB_ROOT_CACHED,
  	.pi_top_task	= NULL,
  #endif
d11ed3ab3   David Howells   Expand INIT_TASK(...
150
  	INIT_PREV_CPUTIME(init_task)
4e7e3adbb   David Howells   Expand various IN...
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
  #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
  	.vtime.seqcount	= SEQCNT_ZERO(init_task.vtime_seqcount),
  	.vtime.starttime = 0,
  	.vtime.state	= VTIME_SYS,
  #endif
  #ifdef CONFIG_NUMA_BALANCING
  	.numa_preferred_nid = -1,
  	.numa_group	= NULL,
  	.numa_faults	= NULL,
  #endif
  #ifdef CONFIG_KASAN
  	.kasan_depth	= 1,
  #endif
  #ifdef CONFIG_TRACE_IRQFLAGS
  	.softirqs_enabled = 1,
  #endif
  #ifdef CONFIG_LOCKDEP
  	.lockdep_recursion = 0,
  #endif
  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  	.ret_stack	= NULL,
  #endif
  #if defined(CONFIG_TRACING) && defined(CONFIG_PREEMPT)
  	.trace_recursion = 0,
  #endif
  #ifdef CONFIG_LIVEPATCH
  	.patch_state	= KLP_UNDEFINED,
  #endif
  #ifdef CONFIG_SECURITY
  	.security	= NULL,
  #endif
d11ed3ab3   David Howells   Expand INIT_TASK(...
182
  };
a4a2eb490   Thomas Gleixner   init_task: Create...
183
184
185
186
187
188
  EXPORT_SYMBOL(init_task);
  
  /*
   * Initial thread structure. Alignment of this is handled by a special
   * linker map entry.
   */
c65eacbe2   Andy Lutomirski   sched/core: Allow...
189
  #ifndef CONFIG_THREAD_INFO_IN_TASK
0500871f2   David Howells   Construct init th...
190
  struct thread_info init_thread_info __init_thread_info = INIT_THREAD_INFO(init_task);
c65eacbe2   Andy Lutomirski   sched/core: Allow...
191
  #endif