# This eliminates use of task.thread.kernel_stack. It was unnecessary, and # was masking a bunch of kernel stack size assumptions. Index: um/arch/um/kernel/process.c =================================================================== --- um.orig/arch/um/kernel/process.c 2004-08-12 13:15:21.000000000 -0400 +++ um/arch/um/kernel/process.c 2004-08-12 13:15:21.000000000 -0400 @@ -45,7 +45,7 @@ int flags = 0, pages; if(sig_stack != NULL){ - pages = (1 << UML_CONFIG_KERNEL_STACK_ORDER) - 2; + pages = (1 << UML_CONFIG_KERNEL_STACK_ORDER); set_sigstack(sig_stack, pages * page_size()); flags = SA_ONSTACK; } Index: um/arch/um/kernel/process_kern.c =================================================================== --- um.orig/arch/um/kernel/process_kern.c 2004-08-12 13:13:11.000000000 -0400 +++ um/arch/um/kernel/process_kern.c 2004-08-12 13:15:21.000000000 -0400 @@ -162,9 +162,6 @@ struct pt_regs *regs) { p->thread = (struct thread_struct) INIT_THREAD; - /* XXX Kernel stack size assumption */ - p->thread.kernel_stack = (unsigned long) p + 2 * PAGE_SIZE; - return(CHOOSE_MODE_PROC(copy_thread_tt, copy_thread_skas, nr, clone_flags, sp, stack_top, p, regs)); } @@ -315,8 +312,7 @@ unsigned long stack; stack = sp & (PAGE_MASK << CONFIG_KERNEL_STACK_ORDER); - stack += 2 * PAGE_SIZE; - return(stack != current->thread.kernel_stack); + return(stack != current); } extern void remove_umid_dir(void); Index: um/arch/um/kernel/skas/process_kern.c =================================================================== --- um.orig/arch/um/kernel/skas/process_kern.c 2004-08-12 13:15:21.000000000 -0400 +++ um/arch/um/kernel/skas/process_kern.c 2004-08-12 13:15:21.000000000 -0400 @@ -130,8 +130,7 @@ handler = new_thread_handler; } - new_thread((void *) p->thread.kernel_stack, - &p->thread.mode.skas.switch_buf, + new_thread(p, &p->thread.mode.skas.switch_buf, &p->thread.mode.skas.fork_buf, handler); return(0); } @@ -191,7 +190,7 @@ init_task.thread.request.u.thread.proc = start_kernel_proc; init_task.thread.request.u.thread.arg = NULL; - return(start_idle_thread((void *) init_task.thread.kernel_stack, + return(start_idle_thread(&init_task, &init_task.thread.mode.skas.switch_buf, &init_task.thread.mode.skas.fork_buf)); } Index: um/arch/um/kernel/tt/exec_kern.c =================================================================== --- um.orig/arch/um/kernel/tt/exec_kern.c 2004-08-12 13:13:11.000000000 -0400 +++ um/arch/um/kernel/tt/exec_kern.c 2004-08-12 13:15:21.000000000 -0400 @@ -39,8 +39,7 @@ do_exit(SIGKILL); } - new_pid = start_fork_tramp((void *) current->thread.kernel_stack, - stack, 0, exec_tramp); + new_pid = start_fork_tramp(current, stack, 0, exec_tramp); if(new_pid < 0){ printk(KERN_ERR "flush_thread : new thread failed, errno = %d\n", Index: um/arch/um/kernel/tt/process_kern.c =================================================================== --- um.orig/arch/um/kernel/tt/process_kern.c 2004-08-12 13:13:11.000000000 -0400 +++ um/arch/um/kernel/tt/process_kern.c 2004-08-12 13:15:21.000000000 -0400 @@ -292,8 +292,7 @@ clone_flags &= CLONE_VM; p->thread.temp_stack = stack; - new_pid = start_fork_tramp((void *) p->thread.kernel_stack, stack, - clone_flags, tramp); + new_pid = start_fork_tramp(p, stack, clone_flags, tramp); if(new_pid < 0){ printk(KERN_ERR "copy_thread : clone failed - errno = %d\n", -new_pid); @@ -578,8 +577,8 @@ void *sp; int pages; - pages = (1 << CONFIG_KERNEL_STACK_ORDER) - 2; - sp = (void *) init_task.thread.kernel_stack + pages * PAGE_SIZE - + pages = (1 << CONFIG_KERNEL_STACK_ORDER); + sp = (void *) ((unsigned long) &init_task) + pages * PAGE_SIZE - sizeof(unsigned long); return(tracer(start_kernel_proc, sp)); } Index: um/arch/um/kernel/um_arch.c =================================================================== --- um.orig/arch/um/kernel/um_arch.c 2004-08-12 13:15:41.000000000 -0400 +++ um/arch/um/kernel/um_arch.c 2004-08-12 13:15:52.000000000 -0400 @@ -387,9 +387,6 @@ uml_postsetup(); - init_task.thread.kernel_stack = (unsigned long) &init_task + - 2 * PAGE_SIZE; - task_protections((unsigned long) &init_task); os_flush_stdout(); Index: um/include/asm-um/processor-generic.h =================================================================== --- um.orig/include/asm-um/processor-generic.h 2004-08-12 13:13:11.000000000 -0400 +++ um/include/asm-um/processor-generic.h 2004-08-12 13:15:21.000000000 -0400 @@ -24,7 +24,6 @@ struct thread_struct { int forking; - unsigned long kernel_stack; int nsyscalls; struct pt_regs regs; unsigned long cr2; @@ -82,7 +81,6 @@ #define INIT_THREAD \ { \ .forking = 0, \ - .kernel_stack = 0, \ .nsyscalls = 0, \ .regs = EMPTY_REGS, \ .cr2 = 0, \