1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 4 */ 5 6 #include <linux/init.h> 7 #include <linux/sched/mm.h> 8 #include <linux/sched/task_stack.h> 9 #include <linux/sched/task.h> 10 11 #include <as-layout.h> 12 #include <kern.h> 13 #include <os.h> 14 #include <skas.h> 15 #include <kern_util.h> 16 17 extern void start_kernel(void); 18 19 static int __init start_kernel_proc(void *unused) 20 { 21 int pid; 22 23 block_signals_trace(); 24 pid = os_getpid(); 25 26 cpu_tasks[0].pid = pid; 27 cpu_tasks[0].task = current; 28 29 start_kernel(); 30 return 0; 31 } 32 33 extern int userspace_pid[]; 34 35 extern char cpu0_irqstack[]; 36 37 int __init start_uml(void) 38 { 39 stack_protections((unsigned long) &cpu0_irqstack); 40 set_sigstack(cpu0_irqstack, THREAD_SIZE); 41 42 init_new_thread_signals(); 43 44 init_task.thread.request.u.thread.proc = start_kernel_proc; 45 init_task.thread.request.u.thread.arg = NULL; 46 return start_idle_thread(task_stack_page(&init_task), 47 &init_task.thread.switch_buf); 48 } 49 50 unsigned long current_stub_stack(void) 51 { 52 if (current->mm == NULL) 53 return 0; 54 55 return current->mm->context.id.stack; 56 } 57