xref: /linux-6.15/include/linux/init_task.h (revision d11ed3ab)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef _LINUX__INIT_TASK_H
31da177e4SLinus Torvalds #define _LINUX__INIT_TASK_H
41da177e4SLinus Torvalds 
5ab2af1f5SDipankar Sarma #include <linux/rcupdate.h>
6de30a2b3SIngo Molnar #include <linux/irqflags.h>
74865ecf1SSerge E. Hallyn #include <linux/utsname.h>
8fbb9ce95SIngo Molnar #include <linux/lockdep.h>
95ac9f622SSteven Rostedt #include <linux/ftrace.h>
1073ea4130SKirill Korotaev #include <linux/ipc.h>
119a575a92SCedric Le Goater #include <linux/pid_namespace.h>
12acce292cSCedric Le Goater #include <linux/user_namespace.h>
133898b1b4SAndrew G. Morgan #include <linux/securebits.h>
146a61671bSFrederic Weisbecker #include <linux/seqlock.h>
15fb00aca4SPeter Zijlstra #include <linux/rbtree.h>
16dfc3401aSIngo Molnar #include <linux/sched/autogroup.h>
17772698f6SEric W. Biederman #include <net/net_namespace.h>
1877852feaSIngo Molnar #include <linux/sched/rt.h>
19d83a7cb3SJosh Poimboeuf #include <linux/livepatch.h>
20589ee628SIngo Molnar #include <linux/mm_types.h>
211da177e4SLinus Torvalds 
22c65eacbeSAndy Lutomirski #include <asm/thread_info.h>
23c65eacbeSAndy Lutomirski 
24806c09a7SDario Faggioli #ifdef CONFIG_SMP
25806c09a7SDario Faggioli # define INIT_PUSHABLE_TASKS(tsk)					\
26806c09a7SDario Faggioli 	.pushable_tasks = PLIST_NODE_INIT(tsk.pushable_tasks, MAX_PRIO),
27806c09a7SDario Faggioli #else
28806c09a7SDario Faggioli # define INIT_PUSHABLE_TASKS(tsk)
29806c09a7SDario Faggioli #endif
30806c09a7SDario Faggioli 
31f52111b1SAl Viro extern struct files_struct init_files;
3218d8fda7SAl Viro extern struct fs_struct init_fs;
331da177e4SLinus Torvalds 
34cc9a6c87SMel Gorman #ifdef CONFIG_CPUSETS
351ca7d67cSJohn Stultz #define INIT_CPUSET_SEQ(tsk)							\
361ca7d67cSJohn Stultz 	.mems_allowed_seq = SEQCNT_ZERO(tsk.mems_allowed_seq),
37cc9a6c87SMel Gorman #else
381ca7d67cSJohn Stultz #define INIT_CPUSET_SEQ(tsk)
39cc9a6c87SMel Gorman #endif
40cc9a6c87SMel Gorman 
419d7fb042SPeter Zijlstra #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
429d7fb042SPeter Zijlstra #define INIT_PREV_CPUTIME(x)	.prev_cputime = {			\
439d7fb042SPeter Zijlstra 	.lock = __RAW_SPIN_LOCK_UNLOCKED(x.prev_cputime.lock),		\
449d7fb042SPeter Zijlstra },
459d7fb042SPeter Zijlstra #else
469d7fb042SPeter Zijlstra #define INIT_PREV_CPUTIME(x)
479d7fb042SPeter Zijlstra #endif
489d7fb042SPeter Zijlstra 
49b18b6a9cSNicolas Pitre #ifdef CONFIG_POSIX_TIMERS
50b18b6a9cSNicolas Pitre #define INIT_POSIX_TIMERS(s)						\
51b18b6a9cSNicolas Pitre 	.posix_timers = LIST_HEAD_INIT(s.posix_timers),
52b18b6a9cSNicolas Pitre #define INIT_CPU_TIMERS(s)						\
53b18b6a9cSNicolas Pitre 	.cpu_timers = {							\
54b18b6a9cSNicolas Pitre 		LIST_HEAD_INIT(s.cpu_timers[0]),			\
55b18b6a9cSNicolas Pitre 		LIST_HEAD_INIT(s.cpu_timers[1]),			\
56b18b6a9cSNicolas Pitre 		LIST_HEAD_INIT(s.cpu_timers[2]),								\
57b18b6a9cSNicolas Pitre 	},
58b18b6a9cSNicolas Pitre #define INIT_CPUTIMER(s)						\
59b18b6a9cSNicolas Pitre 	.cputimer	= { 						\
60b18b6a9cSNicolas Pitre 		.cputime_atomic	= INIT_CPUTIME_ATOMIC,			\
61b18b6a9cSNicolas Pitre 		.running	= false,				\
62b18b6a9cSNicolas Pitre 		.checking_timer = false,				\
63b18b6a9cSNicolas Pitre 	},
64b18b6a9cSNicolas Pitre #else
65b18b6a9cSNicolas Pitre #define INIT_POSIX_TIMERS(s)
66b18b6a9cSNicolas Pitre #define INIT_CPU_TIMERS(s)
67b18b6a9cSNicolas Pitre #define INIT_CPUTIMER(s)
68b18b6a9cSNicolas Pitre #endif
69b18b6a9cSNicolas Pitre 
701da177e4SLinus Torvalds #define INIT_SIGNALS(sig) {						\
71b3ac022cSOleg Nesterov 	.nr_threads	= 1,						\
720c740d0aSOleg Nesterov 	.thread_head	= LIST_HEAD_INIT(init_task.thread_node),	\
731da177e4SLinus Torvalds 	.wait_chldexit	= __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\
741da177e4SLinus Torvalds 	.shared_pending	= { 						\
751da177e4SLinus Torvalds 		.list = LIST_HEAD_INIT(sig.shared_pending.list),	\
761da177e4SLinus Torvalds 		.signal =  {{0}}},					\
77b18b6a9cSNicolas Pitre 	INIT_POSIX_TIMERS(sig)						\
78b18b6a9cSNicolas Pitre 	INIT_CPU_TIMERS(sig)						\
791da177e4SLinus Torvalds 	.rlim		= INIT_RLIMITS,					\
80b18b6a9cSNicolas Pitre 	INIT_CPUTIMER(sig)						\
819d7fb042SPeter Zijlstra 	INIT_PREV_CPUTIME(sig)						\
829b1bf12dSKOSAKI Motohiro 	.cred_guard_mutex =						\
839b1bf12dSKOSAKI Motohiro 		 __MUTEX_INITIALIZER(sig.cred_guard_mutex),		\
841da177e4SLinus Torvalds }
851da177e4SLinus Torvalds 
86ab516013SSerge E. Hallyn extern struct nsproxy init_nsproxy;
87ab516013SSerge E. Hallyn 
881da177e4SLinus Torvalds #define INIT_SIGHAND(sighand) {						\
891da177e4SLinus Torvalds 	.count		= ATOMIC_INIT(1), 				\
900a14a130SOleg Nesterov 	.action		= { { { .sa_handler = SIG_DFL, } }, },		\
91e4d91918SIngo Molnar 	.siglock	= __SPIN_LOCK_UNLOCKED(sighand.siglock),	\
92b8fceee1SDavide Libenzi 	.signalfd_wqh	= __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh),	\
931da177e4SLinus Torvalds }
941da177e4SLinus Torvalds 
951da177e4SLinus Torvalds extern struct group_info init_groups;
961da177e4SLinus Torvalds 
97820e45dbSSukadev Bhattiprolu #define INIT_STRUCT_PID {						\
98820e45dbSSukadev Bhattiprolu 	.count 		= ATOMIC_INIT(1),				\
99820e45dbSSukadev Bhattiprolu 	.tasks		= {						\
100f2001145SOleg Nesterov 		{ .first = NULL },					\
101f2001145SOleg Nesterov 		{ .first = NULL },					\
102f2001145SOleg Nesterov 		{ .first = NULL },					\
103820e45dbSSukadev Bhattiprolu 	},								\
1044c3f2eadSSukadev Bhattiprolu 	.level		= 0,						\
1054c3f2eadSSukadev Bhattiprolu 	.numbers	= { {						\
1064c3f2eadSSukadev Bhattiprolu 		.nr		= 0,					\
1074c3f2eadSSukadev Bhattiprolu 		.ns		= &init_pid_ns,				\
1084c3f2eadSSukadev Bhattiprolu 	}, }								\
109820e45dbSSukadev Bhattiprolu }
110820e45dbSSukadev Bhattiprolu 
111820e45dbSSukadev Bhattiprolu #define INIT_PID_LINK(type) 					\
112820e45dbSSukadev Bhattiprolu {								\
113820e45dbSSukadev Bhattiprolu 	.node = {						\
114820e45dbSSukadev Bhattiprolu 		.next = NULL,					\
115f2001145SOleg Nesterov 		.pprev = NULL,					\
116820e45dbSSukadev Bhattiprolu 	},							\
117820e45dbSSukadev Bhattiprolu 	.pid = &init_struct_pid,				\
118820e45dbSSukadev Bhattiprolu }
119820e45dbSSukadev Bhattiprolu 
120bfef93a5SAl Viro #ifdef CONFIG_AUDITSYSCALL
121bfef93a5SAl Viro #define INIT_IDS \
122e1760bd5SEric W. Biederman 	.loginuid = INVALID_UID, \
1234440e854SEric Paris 	.sessionid = (unsigned int)-1,
124bfef93a5SAl Viro #else
125bfef93a5SAl Viro #define INIT_IDS
126bfef93a5SAl Viro #endif
1273b7391deSSerge E. Hallyn 
12828f6569aSPranith Kumar #ifdef CONFIG_PREEMPT_RCU
129f41d911fSPaul E. McKenney #define INIT_TASK_RCU_PREEMPT(tsk)					\
130f41d911fSPaul E. McKenney 	.rcu_read_lock_nesting = 0,					\
1311d082fd0SPaul E. McKenney 	.rcu_read_unlock_special.s = 0,					\
132a57eb940SPaul E. McKenney 	.rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry),		\
1334e327470SPaul E. McKenney 	.rcu_blocked_node = NULL,
134f41d911fSPaul E. McKenney #else
135f41d911fSPaul E. McKenney #define INIT_TASK_RCU_PREEMPT(tsk)
136f41d911fSPaul E. McKenney #endif
1378315f422SPaul E. McKenney #ifdef CONFIG_TASKS_RCU
1388315f422SPaul E. McKenney #define INIT_TASK_RCU_TASKS(tsk)					\
1398315f422SPaul E. McKenney 	.rcu_tasks_holdout = false,					\
1408315f422SPaul E. McKenney 	.rcu_tasks_holdout_list =					\
141176f8f7aSPaul E. McKenney 		LIST_HEAD_INIT(tsk.rcu_tasks_holdout_list),		\
142176f8f7aSPaul E. McKenney 	.rcu_tasks_idle_cpu = -1,
1438315f422SPaul E. McKenney #else
1448315f422SPaul E. McKenney #define INIT_TASK_RCU_TASKS(tsk)
1458315f422SPaul E. McKenney #endif
146f41d911fSPaul E. McKenney 
147b6dff3ecSDavid Howells extern struct cred init_cred;
148b6dff3ecSDavid Howells 
1498323f26cSPeter Zijlstra #ifdef CONFIG_CGROUP_SCHED
1508323f26cSPeter Zijlstra # define INIT_CGROUP_SCHED(tsk)						\
1518323f26cSPeter Zijlstra 	.sched_task_group = &root_task_group,
1528323f26cSPeter Zijlstra #else
1538323f26cSPeter Zijlstra # define INIT_CGROUP_SCHED(tsk)
1548323f26cSPeter Zijlstra #endif
1558323f26cSPeter Zijlstra 
156cdd6c482SIngo Molnar #ifdef CONFIG_PERF_EVENTS
157cdd6c482SIngo Molnar # define INIT_PERF_EVENTS(tsk)						\
158cdd6c482SIngo Molnar 	.perf_event_mutex = 						\
159cdd6c482SIngo Molnar 		 __MUTEX_INITIALIZER(tsk.perf_event_mutex),		\
160cdd6c482SIngo Molnar 	.perf_event_list = LIST_HEAD_INIT(tsk.perf_event_list),
161082ff5a2SPeter Zijlstra #else
162cdd6c482SIngo Molnar # define INIT_PERF_EVENTS(tsk)
163082ff5a2SPeter Zijlstra #endif
164082ff5a2SPeter Zijlstra 
1656a61671bSFrederic Weisbecker #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
1666a61671bSFrederic Weisbecker # define INIT_VTIME(tsk)						\
167bac5b6b6SFrederic Weisbecker 	.vtime.seqcount = SEQCNT_ZERO(tsk.vtime.seqcount),		\
168bac5b6b6SFrederic Weisbecker 	.vtime.starttime = 0,						\
169bac5b6b6SFrederic Weisbecker 	.vtime.state = VTIME_SYS,
1706a61671bSFrederic Weisbecker #else
1716a61671bSFrederic Weisbecker # define INIT_VTIME(tsk)
1726a61671bSFrederic Weisbecker #endif
1736a61671bSFrederic Weisbecker 
174f1c6f1a7SCarsten Emde #define INIT_TASK_COMM "swapper"
175f1c6f1a7SCarsten Emde 
176fb00aca4SPeter Zijlstra #ifdef CONFIG_RT_MUTEXES
177fb00aca4SPeter Zijlstra # define INIT_RT_MUTEXES(tsk)						\
178a23ba907SDavidlohr Bueso 	.pi_waiters = RB_ROOT_CACHED,					\
179a23ba907SDavidlohr Bueso 	.pi_top_task = NULL,
180fb00aca4SPeter Zijlstra #else
181fb00aca4SPeter Zijlstra # define INIT_RT_MUTEXES(tsk)
182fb00aca4SPeter Zijlstra #endif
183fb00aca4SPeter Zijlstra 
184d8b163c4SKirill Tkhai #ifdef CONFIG_NUMA_BALANCING
185d8b163c4SKirill Tkhai # define INIT_NUMA_BALANCING(tsk)					\
186d8b163c4SKirill Tkhai 	.numa_preferred_nid = -1,					\
187d8b163c4SKirill Tkhai 	.numa_group = NULL,						\
188d8b163c4SKirill Tkhai 	.numa_faults = NULL,
189d8b163c4SKirill Tkhai #else
190d8b163c4SKirill Tkhai # define INIT_NUMA_BALANCING(tsk)
191d8b163c4SKirill Tkhai #endif
192d8b163c4SKirill Tkhai 
193c420f167SAndrey Ryabinin #ifdef CONFIG_KASAN
194c420f167SAndrey Ryabinin # define INIT_KASAN(tsk)						\
195c420f167SAndrey Ryabinin 	.kasan_depth = 1,
196c420f167SAndrey Ryabinin #else
197c420f167SAndrey Ryabinin # define INIT_KASAN(tsk)
198c420f167SAndrey Ryabinin #endif
199c420f167SAndrey Ryabinin 
200d83a7cb3SJosh Poimboeuf #ifdef CONFIG_LIVEPATCH
201d83a7cb3SJosh Poimboeuf # define INIT_LIVEPATCH(tsk)						\
202d83a7cb3SJosh Poimboeuf 	.patch_state = KLP_UNDEFINED,
203d83a7cb3SJosh Poimboeuf #else
204d83a7cb3SJosh Poimboeuf # define INIT_LIVEPATCH(tsk)
205d83a7cb3SJosh Poimboeuf #endif
206d83a7cb3SJosh Poimboeuf 
207c65eacbeSAndy Lutomirski #ifdef CONFIG_THREAD_INFO_IN_TASK
20868f24b08SAndy Lutomirski # define INIT_TASK_TI(tsk)			\
20968f24b08SAndy Lutomirski 	.thread_info = INIT_THREAD_INFO(tsk),	\
21068f24b08SAndy Lutomirski 	.stack_refcount = ATOMIC_INIT(1),
211c65eacbeSAndy Lutomirski #else
212c65eacbeSAndy Lutomirski # define INIT_TASK_TI(tsk)
213c65eacbeSAndy Lutomirski #endif
214c65eacbeSAndy Lutomirski 
215e4e55b47STetsuo Handa #ifdef CONFIG_SECURITY
216e4e55b47STetsuo Handa #define INIT_TASK_SECURITY .security = NULL,
217e4e55b47STetsuo Handa #else
218e4e55b47STetsuo Handa #define INIT_TASK_SECURITY
219e4e55b47STetsuo Handa #endif
220e4e55b47STetsuo Handa 
221857eceebSTim Abbott /* Attach to the init_task data structure for proper alignment */
222*d11ed3abSDavid Howells #ifdef CONFIG_ARCH_TASK_STRUCT_ON_STACK
2232af7687fSTim Abbott #define __init_task_data __attribute__((__section__(".data..init_task")))
224*d11ed3abSDavid Howells #else
225*d11ed3abSDavid Howells #define __init_task_data /**/
226*d11ed3abSDavid Howells #endif
227857eceebSTim Abbott 
2280500871fSDavid Howells /* Attach to the thread_info data structure for proper alignment */
2290500871fSDavid Howells #define __init_thread_info __attribute__((__section__(".data..init_thread_info")))
2300500871fSDavid Howells 
2311da177e4SLinus Torvalds 
2321da177e4SLinus Torvalds #endif
233