1/* 2 * This is where we statically allocate and initialize the initial 3 * task. 4 * 5 * Copyright (C) 1999, 2002-2003 Hewlett-Packard Co 6 * David Mosberger-Tang <davidm@hpl.hp.com> 7 */ 8 9#include <linux/init.h> 10#include <linux/mm.h> 11#include <linux/module.h> 12#include <linux/sched.h> 13#include <linux/init_task.h> 14#include <linux/mqueue.h> 15 16#include <asm/uaccess.h> 17#include <asm/pgtable.h> 18 19static struct fs_struct init_fs = INIT_FS; 20static struct files_struct init_files = INIT_FILES; 21static struct signal_struct init_signals = INIT_SIGNALS(init_signals); 22static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); 23struct mm_struct init_mm = INIT_MM(init_mm); 24 25EXPORT_SYMBOL(init_mm); 26 27/* 28 * Initial task structure. 29 * 30 * We need to make sure that this is properly aligned due to the way process stacks are 31 * handled. This is done by having a special ".data.init_task" section... 32 */ 33#define init_thread_info init_task_mem.s.thread_info 34 35union { 36 struct { 37 struct task_struct task; 38 struct thread_info thread_info; 39 } s; 40 unsigned long stack[KERNEL_STACK_SIZE/sizeof (unsigned long)]; 41} init_task_mem asm ("init_task") __attribute__((section(".data.init_task"))) = {{ 42 .task = INIT_TASK(init_task_mem.s.task), 43 .thread_info = INIT_THREAD_INFO(init_task_mem.s.task) 44}}; 45 46EXPORT_SYMBOL(init_task); 47