/*1* Copyright 2010 Tilera Corporation. All Rights Reserved.2*3* This program is free software; you can redistribute it and/or4* modify it under the terms of the GNU General Public License5* as published by the Free Software Foundation, version 2.6*7* This program is distributed in the hope that it will be useful, but8* WITHOUT ANY WARRANTY; without even the implied warranty of9* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or10* NON INFRINGEMENT. See the GNU General Public License for11* more details.12*/1314#include <linux/mm.h>15#include <linux/fs.h>16#include <linux/init_task.h>17#include <linux/mqueue.h>18#include <linux/module.h>19#include <linux/start_kernel.h>20#include <linux/uaccess.h>2122static struct signal_struct init_signals = INIT_SIGNALS(init_signals);23static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);2425/*26* Initial thread structure.27*28* We need to make sure that this is THREAD_SIZE aligned due to the29* way process stacks are handled. This is done by having a special30* "init_task" linker map entry..31*/32union thread_union init_thread_union __init_task_data = {33INIT_THREAD_INFO(init_task)34};3536/*37* Initial task structure.38*39* All other task structs will be allocated on slabs in fork.c40*/41struct task_struct init_task = INIT_TASK(init_task);42EXPORT_SYMBOL(init_task);4344/*45* per-CPU stack and boot info.46*/47DEFINE_PER_CPU(unsigned long, boot_sp) =48(unsigned long)init_stack + THREAD_SIZE;4950#ifdef CONFIG_SMP51DEFINE_PER_CPU(unsigned long, boot_pc) = (unsigned long)start_kernel;52#else53/*54* The variable must be __initdata since it references __init code.55* With CONFIG_SMP it is per-cpu data, which is exempt from validation.56*/57unsigned long __initdata boot_pc = (unsigned long)start_kernel;58#endif596061