From: Al Viro a) added embedded thread_info [m68k processor.h] b) added missing symbols in asm-offsets.c c) task_thread_info() and friends in asm-m68k/thread_info.h d) made m68k thread_info.h included by m68k processor.h, not the other way round. Signed-off-by: Al Viro Signed-off-by: Roman Zippel Signed-off-by: Andrew Morton --- arch/m68k/kernel/asm-offsets.c | 5 +++++ include/asm-m68k/processor.h | 2 ++ include/asm-m68k/thread_info.h | 14 ++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff -puN arch/m68k/kernel/asm-offsets.c~m68k-m68k-specific-thread_info-changes arch/m68k/kernel/asm-offsets.c --- 25/arch/m68k/kernel/asm-offsets.c~m68k-m68k-specific-thread_info-changes Thu Sep 1 17:13:51 2005 +++ 25-akpm/arch/m68k/kernel/asm-offsets.c Thu Sep 1 17:13:51 2005 @@ -31,6 +31,7 @@ int main(void) DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, thread.work.sigpending)); DEFINE(TASK_NOTIFY_RESUME, offsetof(struct task_struct, thread.work.notify_resume)); DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); + DEFINE(TASK_INFO, offsetof(struct task_struct, thread.info)); DEFINE(TASK_MM, offsetof(struct task_struct, mm)); DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); @@ -45,6 +46,10 @@ int main(void) DEFINE(THREAD_FPCNTL, offsetof(struct thread_struct, fpcntl)); DEFINE(THREAD_FPSTATE, offsetof(struct thread_struct, fpstate)); + /* offsets into the thread_info struct */ + DEFINE(TINFO_PREEMPT, offsetof(struct thread_info, preempt_count)); + DEFINE(TINFO_FLAGS, offsetof(struct thread_info, flags)); + /* offsets into the pt_regs */ DEFINE(PT_D0, offsetof(struct pt_regs, d0)); DEFINE(PT_ORIG_D0, offsetof(struct pt_regs, orig_d0)); diff -puN include/asm-m68k/processor.h~m68k-m68k-specific-thread_info-changes include/asm-m68k/processor.h --- 25/include/asm-m68k/processor.h~m68k-m68k-specific-thread_info-changes Thu Sep 1 17:13:51 2005 +++ 25-akpm/include/asm-m68k/processor.h Thu Sep 1 17:13:51 2005 @@ -14,6 +14,7 @@ #define current_text_addr() ({ __label__ _l; _l: &&_l;}) #include +#include #include #include #include @@ -79,6 +80,7 @@ struct thread_struct { unsigned long fpcntl[3]; /* fp control regs */ unsigned char fpstate[FPSTATESIZE]; /* floating point state */ struct task_work work; + struct thread_info info; }; #define INIT_THREAD { \ diff -puN include/asm-m68k/thread_info.h~m68k-m68k-specific-thread_info-changes include/asm-m68k/thread_info.h --- 25/include/asm-m68k/thread_info.h~m68k-m68k-specific-thread_info-changes Thu Sep 1 17:13:51 2005 +++ 25-akpm/include/asm-m68k/thread_info.h Thu Sep 1 17:13:51 2005 @@ -2,7 +2,6 @@ #define _ASM_M68K_THREAD_INFO_H #include -#include #include struct thread_info { @@ -35,14 +34,21 @@ struct thread_info { #define free_thread_info(ti) free_pages((unsigned long)(ti),1) #endif /* PAGE_SHIFT == 13 */ -//#define init_thread_info (init_task.thread.info) +#define init_thread_info (init_task.thread.info) #define init_stack (init_thread_union.stack) -#define current_thread_info() (current->thread_info) - +#define task_thread_info(tsk) (&(tsk)->thread.info) +#define current_thread_info() task_thread_info(current) #define __HAVE_THREAD_FUNCTIONS +#define setup_thread_stack(p, org) ({ \ + *(struct task_struct **)(p)->thread_info = (p); \ + task_thread_info(p)->task = (p); \ +}) + +#define end_of_stack(p) ((unsigned long *)(p)->thread_info + 1) + #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ #define TIF_DELAYED_TRACE 1 /* single step a syscall */ #define TIF_NOTIFY_RESUME 2 /* resumption notification requested */ _