Loading arch/um/include/asm/processor-generic.h +0 −2 Original line number Original line Diff line number Diff line Loading @@ -63,8 +63,6 @@ static inline void release_thread(struct task_struct *task) { { } } extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); extern unsigned long thread_saved_pc(struct task_struct *t); extern unsigned long thread_saved_pc(struct task_struct *t); static inline void mm_copy_segments(struct mm_struct *from_mm, static inline void mm_copy_segments(struct mm_struct *from_mm, Loading arch/um/kernel/process.c +3 −14 Original line number Original line Diff line number Diff line Loading @@ -69,18 +69,6 @@ unsigned long alloc_stack(int order, int atomic) return page; return page; } } int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) { int pid; current->thread.request.u.thread.proc = fn; current->thread.request.u.thread.arg = arg; pid = do_fork(CLONE_VM | CLONE_UNTRACED | flags, 0, ¤t->thread.regs, 0, NULL, NULL); return pid; } EXPORT_SYMBOL(kernel_thread); static inline void set_current(struct task_struct *task) static inline void set_current(struct task_struct *task) { { cpu_tasks[task_thread_info(task)->cpu] = ((struct cpu_task) cpu_tasks[task_thread_info(task)->cpu] = ((struct cpu_task) Loading Loading @@ -177,7 +165,7 @@ void fork_handler(void) } } int copy_thread(unsigned long clone_flags, unsigned long sp, int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long stack_top, struct task_struct * p, unsigned long arg, struct task_struct * p, struct pt_regs *regs) struct pt_regs *regs) { { void (*handler)(void); void (*handler)(void); Loading @@ -198,7 +186,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, arch_copy_thread(¤t->thread.arch, &p->thread.arch); arch_copy_thread(¤t->thread.arch, &p->thread.arch); } else { } else { get_safe_registers(p->thread.regs.regs.gp, p->thread.regs.regs.fp); get_safe_registers(p->thread.regs.regs.gp, p->thread.regs.regs.fp); p->thread.request.u.thread = current->thread.request.u.thread; p->thread.request.u.thread.proc = (int (*)(void *))sp; p->thread.request.u.thread.arg = (void *)arg; handler = new_thread_handler; handler = new_thread_handler; } } Loading arch/x86/um/Kconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,7 @@ endmenu config UML_X86 config UML_X86 def_bool y def_bool y select GENERIC_FIND_FIRST_BIT select GENERIC_FIND_FIRST_BIT select GENERIC_KERNEL_THREAD config 64BIT config 64BIT bool "64-bit kernel" if SUBARCH = "x86" bool "64-bit kernel" if SUBARCH = "x86" Loading Loading
arch/um/include/asm/processor-generic.h +0 −2 Original line number Original line Diff line number Diff line Loading @@ -63,8 +63,6 @@ static inline void release_thread(struct task_struct *task) { { } } extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); extern unsigned long thread_saved_pc(struct task_struct *t); extern unsigned long thread_saved_pc(struct task_struct *t); static inline void mm_copy_segments(struct mm_struct *from_mm, static inline void mm_copy_segments(struct mm_struct *from_mm, Loading
arch/um/kernel/process.c +3 −14 Original line number Original line Diff line number Diff line Loading @@ -69,18 +69,6 @@ unsigned long alloc_stack(int order, int atomic) return page; return page; } } int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) { int pid; current->thread.request.u.thread.proc = fn; current->thread.request.u.thread.arg = arg; pid = do_fork(CLONE_VM | CLONE_UNTRACED | flags, 0, ¤t->thread.regs, 0, NULL, NULL); return pid; } EXPORT_SYMBOL(kernel_thread); static inline void set_current(struct task_struct *task) static inline void set_current(struct task_struct *task) { { cpu_tasks[task_thread_info(task)->cpu] = ((struct cpu_task) cpu_tasks[task_thread_info(task)->cpu] = ((struct cpu_task) Loading Loading @@ -177,7 +165,7 @@ void fork_handler(void) } } int copy_thread(unsigned long clone_flags, unsigned long sp, int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long stack_top, struct task_struct * p, unsigned long arg, struct task_struct * p, struct pt_regs *regs) struct pt_regs *regs) { { void (*handler)(void); void (*handler)(void); Loading @@ -198,7 +186,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, arch_copy_thread(¤t->thread.arch, &p->thread.arch); arch_copy_thread(¤t->thread.arch, &p->thread.arch); } else { } else { get_safe_registers(p->thread.regs.regs.gp, p->thread.regs.regs.fp); get_safe_registers(p->thread.regs.regs.gp, p->thread.regs.regs.fp); p->thread.request.u.thread = current->thread.request.u.thread; p->thread.request.u.thread.proc = (int (*)(void *))sp; p->thread.request.u.thread.arg = (void *)arg; handler = new_thread_handler; handler = new_thread_handler; } } Loading
arch/x86/um/Kconfig +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,7 @@ endmenu config UML_X86 config UML_X86 def_bool y def_bool y select GENERIC_FIND_FIRST_BIT select GENERIC_FIND_FIRST_BIT select GENERIC_KERNEL_THREAD config 64BIT config 64BIT bool "64-bit kernel" if SUBARCH = "x86" bool "64-bit kernel" if SUBARCH = "x86" Loading