blob: ddecf326dab28d08682bc869d659960425c33f80 [file] [log] [blame]
Jeff Dike995473a2006-09-27 01:50:40 -07001/*
Jeff Dikeba180fd2007-10-16 01:27:00 -07002 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
Jeff Dike995473a2006-09-27 01:50:40 -07003 * Licensed under the GPL
4 */
5
Al Viro37185b32012-10-08 03:27:32 +01006#include <linux/init.h>
7#include <linux/sched.h>
Ingo Molnar68db0cf2017-02-08 18:51:37 +01008#include <linux/sched/task_stack.h>
Al Viro37185b32012-10-08 03:27:32 +01009#include <as-layout.h>
10#include <kern.h>
11#include <os.h>
12#include <skas.h>
Jeff Dike995473a2006-09-27 01:50:40 -070013
Jeff Dike995473a2006-09-27 01:50:40 -070014extern void start_kernel(void);
15
Jeff Dike97a1fcb2007-07-23 18:43:48 -070016static int __init start_kernel_proc(void *unused)
Jeff Dike995473a2006-09-27 01:50:40 -070017{
18 int pid;
19
20 block_signals();
21 pid = os_getpid();
22
23 cpu_tasks[0].pid = pid;
24 cpu_tasks[0].task = current;
Richard Weinberger28fa4682015-03-18 21:42:54 +010025
Jeff Dike995473a2006-09-27 01:50:40 -070026 start_kernel();
Jeff Dike77bf4402007-10-16 01:26:58 -070027 return 0;
Jeff Dike995473a2006-09-27 01:50:40 -070028}
29
30extern int userspace_pid[];
31
Jeff Dikec14b8492007-05-10 22:22:34 -070032extern char cpu0_irqstack[];
33
Jeff Dike77bf4402007-10-16 01:26:58 -070034int __init start_uml(void)
Jeff Dike995473a2006-09-27 01:50:40 -070035{
Jeff Dikec14b8492007-05-10 22:22:34 -070036 stack_protections((unsigned long) &cpu0_irqstack);
37 set_sigstack(cpu0_irqstack, THREAD_SIZE);
Jeff Dike995473a2006-09-27 01:50:40 -070038
39 init_new_thread_signals();
40
41 init_task.thread.request.u.thread.proc = start_kernel_proc;
42 init_task.thread.request.u.thread.arg = NULL;
Jeff Dike77bf4402007-10-16 01:26:58 -070043 return start_idle_thread(task_stack_page(&init_task),
44 &init_task.thread.switch_buf);
Jeff Dike995473a2006-09-27 01:50:40 -070045}
46
47unsigned long current_stub_stack(void)
48{
Jeff Dikeba180fd2007-10-16 01:27:00 -070049 if (current->mm == NULL)
Jeff Dike77bf4402007-10-16 01:26:58 -070050 return 0;
Jeff Dike995473a2006-09-27 01:50:40 -070051
Jeff Dike6c738ff2007-10-16 01:27:06 -070052 return current->mm->context.id.stack;
Jeff Dike995473a2006-09-27 01:50:40 -070053}