<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: Jeff Dike &lt;jdike@addtoit.com&gt;

This patch eliminates use of task.thread.kernel_stack.  It was unnecessary,
confusing, and was masking some kernel stack size assumptions.

Signed-off-by: Andrew Morton &lt;akpm@osdl.org&gt;
---

 25-akpm/arch/um/kernel/process.c           |    2 +-
 25-akpm/arch/um/kernel/process_kern.c      |    5 +----
 25-akpm/arch/um/kernel/skas/process_kern.c |    5 ++---
 25-akpm/arch/um/kernel/tt/exec_kern.c      |    3 +--
 25-akpm/arch/um/kernel/tt/process_kern.c   |    9 ++++-----
 25-akpm/arch/um/kernel/um_arch.c           |    3 ---
 25-akpm/include/asm-um/processor-generic.h |    2 --
 7 files changed, 9 insertions(+), 20 deletions(-)

diff -puN arch/um/kernel/process.c~uml-eliminate-useless-thread-field arch/um/kernel/process.c
--- 25/arch/um/kernel/process.c~uml-eliminate-useless-thread-field	2004-09-11 16:39:54.152107488 -0700
+++ 25-akpm/arch/um/kernel/process.c	2004-09-11 16:39:54.164105664 -0700
@@ -46,7 +46,7 @@ void init_new_thread_stack(void *sig_sta
 	int flags = 0, pages;
 
 	if(sig_stack != NULL){
-		pages = (1 &lt;&lt; UML_CONFIG_KERNEL_STACK_ORDER) - 2;
+		pages = (1 &lt;&lt; UML_CONFIG_KERNEL_STACK_ORDER);
 		set_sigstack(sig_stack, pages * page_size());
 		flags = SA_ONSTACK;
 	}
diff -puN arch/um/kernel/process_kern.c~uml-eliminate-useless-thread-field arch/um/kernel/process_kern.c
--- 25/arch/um/kernel/process_kern.c~uml-eliminate-useless-thread-field	2004-09-11 16:39:54.153107336 -0700
+++ 25-akpm/arch/um/kernel/process_kern.c	2004-09-11 16:39:54.164105664 -0700
@@ -166,8 +166,6 @@ int copy_thread(int nr, unsigned long cl
 		struct pt_regs *regs)
 {
 	p-&gt;thread = (struct thread_struct) INIT_THREAD;
-	p-&gt;thread.kernel_stack = 
-		(unsigned long) p-&gt;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 +325,7 @@ int user_context(unsigned long sp)
 	unsigned long stack;
 
 	stack = sp &amp; (PAGE_MASK &lt;&lt; CONFIG_KERNEL_STACK_ORDER);
-	stack += 2 * PAGE_SIZE;
-	return(stack != current-&gt;thread.kernel_stack);
+	return(stack != (unsigned long) current_thread);
 }
 
 extern void remove_umid_dir(void);
diff -puN arch/um/kernel/skas/process_kern.c~uml-eliminate-useless-thread-field arch/um/kernel/skas/process_kern.c
--- 25/arch/um/kernel/skas/process_kern.c~uml-eliminate-useless-thread-field	2004-09-11 16:39:54.155107032 -0700
+++ 25-akpm/arch/um/kernel/skas/process_kern.c	2004-09-11 16:39:54.165105512 -0700
@@ -191,8 +191,7 @@ int copy_thread_skas(int nr, unsigned lo
 		handler = new_thread_handler;
 	}
 
-	new_thread((void *) p-&gt;thread.kernel_stack, 
-		   &amp;p-&gt;thread.mode.skas.switch_buf, 
+	new_thread(p-&gt;thread_info, &amp;p-&gt;thread.mode.skas.switch_buf,
 		   &amp;p-&gt;thread.mode.skas.fork_buf, handler);
 	return(0);
 }
@@ -231,7 +230,7 @@ int start_uml_skas(void)
 
 	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,
 				 &amp;init_task.thread.mode.skas.switch_buf,
 				 &amp;init_task.thread.mode.skas.fork_buf));
 }
diff -puN arch/um/kernel/tt/exec_kern.c~uml-eliminate-useless-thread-field arch/um/kernel/tt/exec_kern.c
--- 25/arch/um/kernel/tt/exec_kern.c~uml-eliminate-useless-thread-field	2004-09-11 16:39:54.156106880 -0700
+++ 25-akpm/arch/um/kernel/tt/exec_kern.c	2004-09-11 16:39:54.165105512 -0700
@@ -39,8 +39,7 @@ void flush_thread_tt(void)
 		do_exit(SIGKILL);
 	}
 		
-	new_pid = start_fork_tramp((void *) current-&gt;thread.kernel_stack,
-				   stack, 0, exec_tramp);
+	new_pid = start_fork_tramp(current-&gt;thread_info, stack, 0, exec_tramp);
 	if(new_pid &lt; 0){
 		printk(KERN_ERR 
 		       "flush_thread : new thread failed, errno = %d\n",
diff -puN arch/um/kernel/tt/process_kern.c~uml-eliminate-useless-thread-field arch/um/kernel/tt/process_kern.c
--- 25/arch/um/kernel/tt/process_kern.c~uml-eliminate-useless-thread-field	2004-09-11 16:39:54.158106576 -0700
+++ 25-akpm/arch/um/kernel/tt/process_kern.c	2004-09-11 16:39:54.166105360 -0700
@@ -248,8 +248,7 @@ int copy_thread_tt(int nr, unsigned long
 
 	clone_flags &amp;= CLONE_VM;
 	p-&gt;thread.temp_stack = stack;
-	new_pid = start_fork_tramp((void *) p-&gt;thread.kernel_stack, stack,
-				   clone_flags, tramp);
+	new_pid = start_fork_tramp(p-&gt;thread_info, stack, clone_flags, tramp);
 	if(new_pid &lt; 0){
 		printk(KERN_ERR "copy_thread : clone failed - errno = %d\n", 
 		       -new_pid);
@@ -501,9 +500,9 @@ int start_uml_tt(void)
 	void *sp;
 	int pages;
 
-	pages = (1 &lt;&lt; CONFIG_KERNEL_STACK_ORDER) - 2;
-	sp = (void *) init_task.thread.kernel_stack + pages * PAGE_SIZE - 
-		sizeof(unsigned long);
+	pages = (1 &lt;&lt; CONFIG_KERNEL_STACK_ORDER);
+	sp = (void *) ((unsigned long) init_task.thread_info) +
+		pages * PAGE_SIZE - sizeof(unsigned long);
 	return(tracer(start_kernel_proc, sp));
 }
 
diff -puN arch/um/kernel/um_arch.c~uml-eliminate-useless-thread-field arch/um/kernel/um_arch.c
--- 25/arch/um/kernel/um_arch.c~uml-eliminate-useless-thread-field	2004-09-11 16:39:54.159106424 -0700
+++ 25-akpm/arch/um/kernel/um_arch.c	2004-09-11 16:39:54.166105360 -0700
@@ -380,9 +380,6 @@ int linux_main(int argc, char **argv)
 
   	uml_postsetup();
 
-	init_task.thread.kernel_stack = (unsigned long) &amp;init_thread_info + 
-		2 * PAGE_SIZE;
-
 	task_protections((unsigned long) &amp;init_thread_info);
 	os_flush_stdout();
 
diff -puN include/asm-um/processor-generic.h~uml-eliminate-useless-thread-field include/asm-um/processor-generic.h
--- 25/include/asm-um/processor-generic.h~uml-eliminate-useless-thread-field	2004-09-11 16:39:54.160106272 -0700
+++ 25-akpm/include/asm-um/processor-generic.h	2004-09-11 16:39:54.167105208 -0700
@@ -22,7 +22,6 @@ struct mm_struct;
 
 struct thread_struct {
 	int forking;
-	unsigned long kernel_stack;
 	int nsyscalls;
 	struct pt_regs regs;
 	unsigned long cr2;
@@ -73,7 +72,6 @@ struct thread_struct {
 #define INIT_THREAD \
 { \
 	.forking		= 0, \
-	.kernel_stack		= 0, \
 	.nsyscalls		= 0, \
         .regs		   	= EMPTY_REGS, \
 	.cr2			= 0, \
_
</pre></body></html>