# 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 15:20:26.000000000 -0400 +++ um/arch/um/kernel/process.c 2004-08-12 15:27:43.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 15:20:26.000000000 -0400 +++ um/arch/um/kernel/process_kern.c 2004-08-12 15:27:43.000000000 -0400 @@ -165,9 +165,6 @@ struct pt_regs *regs) { p->thread = (struct thread_struct) INIT_THREAD; - /* XXX Kernel stack size assumption */ - p->thread.kernel_stack = - (unsigned long) p->thread_info + 2 * PAGE_SIZE; return(CHOOSE_MODE_PROC(copy_thread_tt, copy_thread_skas, nr, clone_flags, sp, stack_top, p, regs)); } @@ -327,8 +324,7 @@ unsigned long stack; stack = sp & (PAGE_MASK << CONFIG_KERNEL_STACK_ORDER); - stack += 2 * PAGE_SIZE; - return(stack != current->thread.kernel_stack); + return(stack != (unsigned long) current_thread); } 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 15:20:26.000000000 -0400 +++ um/arch/um/kernel/skas/process_kern.c 2004-08-12 15:27:43.000000000 -0400 @@ -132,8 +132,7 @@ handler = new_thread_handler; } - new_thread((void *) p->thread.kernel_stack, - &p->thread.mode.skas.switch_buf, + new_thread(p->thread_info, &p->thread.mode.skas.switch_buf, &p->thread.mode.skas.fork_buf, handler); return(0); } @@ -194,7 +193,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.thread_info, &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 15:20:26.000000000 -0400 +++ um/arch/um/kernel/tt/exec_kern.c 2004-08-12 15:27:43.000000000 -0400 @@ -40,8 +40,7 @@ do_exit(SIGKILL); } - new_pid = start_fork_tramp((void *) current->thread.kernel_stack, - stack, 0, exec_tramp); + new_pid = start_fork_tramp(current->thread_info, 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 15:20:26.000000000 -0400 +++ um/arch/um/kernel/tt/process_kern.c 2004-08-12 15:28:15.000000000 -0400 @@ -267,8 +267,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->thread_info, stack, clone_flags, tramp); if(new_pid < 0){ printk(KERN_ERR "copy_thread : clone failed - errno = %d\n", -new_pid); @@ -534,9 +533,9 @@ void *sp; int pages; - pages = (1 << CONFIG_KERNEL_STACK_ORDER) - 2; - sp = (void *) init_task.thread.kernel_stack + pages * PAGE_SIZE - - sizeof(unsigned long); + pages = (1 << CONFIG_KERNEL_STACK_ORDER); + sp = (void *) ((unsigned long) init_task.thread_info) + + 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 15:20:26.000000000 -0400 +++ um/arch/um/kernel/um_arch.c 2004-08-12 15:27:43.000000000 -0400 @@ -389,9 +389,6 @@ uml_postsetup(); - init_task.thread.kernel_stack = (unsigned long) &init_thread_info + - 2 * PAGE_SIZE; - task_protections((unsigned long) &init_thread_info); os_flush_stdout(); Index: um/include/asm-um/processor-generic.h =================================================================== --- um.orig/include/asm-um/processor-generic.h 2004-08-12 15:20:26.000000000 -0400 +++ um/include/asm-um/processor-generic.h 2004-08-12 15:27:43.000000000 -0400 @@ -22,7 +22,6 @@ struct thread_struct { int forking; - unsigned long kernel_stack; int nsyscalls; struct pt_regs regs; unsigned long cr2; @@ -73,7 +72,6 @@ #define INIT_THREAD \ { \ .forking = 0, \ - .kernel_stack = 0, \ .nsyscalls = 0, \ .regs = EMPTY_REGS, \ .cr2 = 0, \