#include #include #include #include #include #include #include #include #include #include #include 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}} }, .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) 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), }; /* Initial task structure */ struct task_struct init_task = INIT_TASK(init_task); EXPORT_SYMBOL(init_task); /* * Initial thread structure. Alignment of this is handled by a special * linker map entry. */ union thread_union init_thread_union __init_task_data = { #ifndef CONFIG_THREAD_INFO_IN_TASK INIT_THREAD_INFO(init_task) #endif };