process.c (1076B)
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 16extern void start_kernel(void); 17 18static int __init start_kernel_proc(void *unused) 19{ 20 int pid; 21 22 block_signals_trace(); 23 pid = os_getpid(); 24 25 cpu_tasks[0].pid = pid; 26 cpu_tasks[0].task = current; 27 28 start_kernel(); 29 return 0; 30} 31 32extern int userspace_pid[]; 33 34extern char cpu0_irqstack[]; 35 36int __init start_uml(void) 37{ 38 stack_protections((unsigned long) &cpu0_irqstack); 39 set_sigstack(cpu0_irqstack, THREAD_SIZE); 40 41 init_new_thread_signals(); 42 43 init_task.thread.request.u.thread.proc = start_kernel_proc; 44 init_task.thread.request.u.thread.arg = NULL; 45 return start_idle_thread(task_stack_page(&init_task), 46 &init_task.thread.switch_buf); 47} 48 49unsigned long current_stub_stack(void) 50{ 51 if (current->mm == NULL) 52 return 0; 53 54 return current->mm->context.id.stack; 55}