From: Al Viro Patchset annotates arch/* uses of ->thread_info. Ones that really are about access of thread_info of given process are simply switched to task_thread_info(task); ones that deal with access to objects on stack are switched to new helper - task_stack_page(). A _lot_ of the latter are actually open-coded instances of "find where pt_regs are"; those are consolidated into task_pt_regs(task) (many architectures actually have such helper already). Note that these annotations are not mandatory - any code not converted to these helpers still works. However, they clean up a lot of places and have actually caught a number of bugs, so converting out of tree ports would be a good idea... As an example of breakage caught by that stuff, see i386 pt_regs mess - we used to have it open-coded in a bunch of places and when back in April Stas had fixed a bug in copy_thread(), the rest had been left out of sync. That required two followup patches (the latest - just before 2.6.15) _and_ still had left /proc/*/stat eip field broken. Try ps -eo eip on i386 and watch the junk... This patch: new helper - task_stack_page(task). Returns pointer to the memory object containing task stack; usually thread_info of task sits in the beginning of that object. Signed-off-by: Al Viro Signed-off-by: Andrew Morton --- include/asm-m68k/thread_info.h | 1 + include/linux/sched.h | 1 + 2 files changed, 2 insertions(+) diff -puN include/asm-m68k/thread_info.h~missing-helper-task_stack_page include/asm-m68k/thread_info.h --- devel/include/asm-m68k/thread_info.h~missing-helper-task_stack_page 2006-01-04 22:01:35.000000000 -0800 +++ devel-akpm/include/asm-m68k/thread_info.h 2006-01-04 22:01:35.000000000 -0800 @@ -37,6 +37,7 @@ struct thread_info { #define init_stack (init_thread_union.stack) #define task_thread_info(tsk) (&(tsk)->thread.info) +#define task_stack_page(tsk) ((void *)(tsk)->thread_info) #define current_thread_info() task_thread_info(current) #define __HAVE_THREAD_FUNCTIONS diff -puN include/linux/sched.h~missing-helper-task_stack_page include/linux/sched.h --- devel/include/linux/sched.h~missing-helper-task_stack_page 2006-01-04 22:01:35.000000000 -0800 +++ devel-akpm/include/linux/sched.h 2006-01-04 22:01:35.000000000 -0800 @@ -1255,6 +1255,7 @@ static inline void task_unlock(struct ta #ifndef __HAVE_THREAD_FUNCTIONS #define task_thread_info(task) (task)->thread_info +#define task_stack_page(task) ((void*)((task)->thread_info)) static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org) { _