--- 2.4.19pre9aa1/arch/um/kernel/init_task.c.~1~ Wed May 29 20:26:49 2002 +++ 2.4.19pre9aa1/arch/um/kernel/init_task.c Wed May 29 22:20:00 2002 @@ -6,6 +6,7 @@ #include "linux/mm.h" #include "linux/sched.h" #include "linux/version.h" +#include "linux/sched_runqueue.h" #include "asm/uaccess.h" #include "asm/pgtable.h" #include "user_util.h" --- 2.4.19pre9aa1/arch/um/kernel/process_kern.c.~1~ Wed May 29 20:26:49 2002 +++ 2.4.19pre9aa1/arch/um/kernel/process_kern.c Wed May 29 22:27:09 2002 @@ -119,7 +119,7 @@ unsigned long alloc_stack(void) return(page); } -extern void schedule_tail(struct task_struct *prev); +asmlinkage void schedule_tail(task_t *prev); static void new_thread_handler(int sig) { @@ -134,8 +134,10 @@ static void new_thread_handler(int sig) free_page(current->thread.temp_stack); set_cmdline("(kernel thread)"); force_flush_all(); +#ifdef CONFIG_SMP if(current->thread.prev_sched != NULL) schedule_tail(current->thread.prev_sched); +#endif current->thread.prev_sched = NULL; change_sig(SIGUSR1, 1); unblock_signals(); @@ -247,8 +249,10 @@ void finish_fork_handler(int sig) if(current->mm != current->p_pptr->mm) protect(uml_reserved, high_physmem - uml_reserved, 1, 1, 0, 1); task_protections((unsigned long) current); +#ifdef CONFIG_SMP if(current->thread.prev_sched != NULL) schedule_tail(current->thread.prev_sched); +#endif current->thread.prev_sched = NULL; free_page(current->thread.temp_stack);