Commit f7e4217b authored by Roman Zippel's avatar Roman Zippel Committed by Linus Torvalds

rename thread_info to stack

This finally renames the thread_info field in task structure to stack, so that
the assumptions about this field are gone and archs have more freedom about
placing the thread_info structure.

Nonbroken archs which have a proper thread pointer can do the access to both
current thread and task structure via a single pointer.

It'll allow for a few more cleanups of the fork code, from which e.g.  ia64
could benefit.
Signed-off-by: default avatarRoman Zippel <zippel@linux-m68k.org>
[akpm@linux-foundation.org: build fix]
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Ian Molton <spyro@f2s.com>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Mikael Starvik <starvik@axis.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Cc: Greg Ungerer <gerg@uclinux.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
Cc: Richard Curnow <rc@rc0.org.uk>
Cc: William Lee Irwin III <wli@holomorphy.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp>
Cc: Andi Kleen <ak@muc.de>
Cc: Chris Zankel <chris@zankel.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c9f4f06d
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
static inline struct pt_regs *get_user_regs(struct task_struct *task) static inline struct pt_regs *get_user_regs(struct task_struct *task)
{ {
return (struct pt_regs *) return (struct pt_regs *)
((unsigned long)task->thread_info + ((unsigned long)task_stack_page(task) +
(THREAD_SIZE - sizeof(struct pt_regs))); (THREAD_SIZE - sizeof(struct pt_regs)));
} }
...@@ -99,7 +99,7 @@ static inline long get_reg(struct task_struct *task, int regno) ...@@ -99,7 +99,7 @@ static inline long get_reg(struct task_struct *task, int regno)
unsigned char *reg_ptr; unsigned char *reg_ptr;
struct pt_regs *regs = struct pt_regs *regs =
(struct pt_regs *)((unsigned long)task->thread_info + (struct pt_regs *)((unsigned long)task_stack_page(task) +
(THREAD_SIZE - sizeof(struct pt_regs))); (THREAD_SIZE - sizeof(struct pt_regs)));
reg_ptr = (char *)regs; reg_ptr = (char *)regs;
...@@ -125,7 +125,7 @@ put_reg(struct task_struct *task, int regno, unsigned long data) ...@@ -125,7 +125,7 @@ put_reg(struct task_struct *task, int regno, unsigned long data)
char * reg_ptr; char * reg_ptr;
struct pt_regs *regs = struct pt_regs *regs =
(struct pt_regs *)((unsigned long)task->thread_info + (struct pt_regs *)((unsigned long)task_stack_page(task) +
(THREAD_SIZE - sizeof(struct pt_regs))); (THREAD_SIZE - sizeof(struct pt_regs)));
reg_ptr = (char *)regs; reg_ptr = (char *)regs;
......
...@@ -30,7 +30,7 @@ int main(void) ...@@ -30,7 +30,7 @@ int main(void)
DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace));
DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked)); DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked));
DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));
DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, thread_info)); DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
DEFINE(TASK_MM, offsetof(struct task_struct, mm)); DEFINE(TASK_MM, offsetof(struct task_struct, mm));
DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));
......
...@@ -1689,7 +1689,7 @@ format_mca_init_stack(void *mca_data, unsigned long offset, ...@@ -1689,7 +1689,7 @@ format_mca_init_stack(void *mca_data, unsigned long offset,
ti->preempt_count = 1; ti->preempt_count = 1;
ti->task = p; ti->task = p;
ti->cpu = cpu; ti->cpu = cpu;
p->thread_info = ti; p->stack = ti;
p->state = TASK_UNINTERRUPTIBLE; p->state = TASK_UNINTERRUPTIBLE;
cpu_set(cpu, p->cpus_allowed); cpu_set(cpu, p->cpus_allowed);
INIT_LIST_HEAD(&p->tasks); INIT_LIST_HEAD(&p->tasks);
......
...@@ -82,7 +82,7 @@ void output_task_defines(void) ...@@ -82,7 +82,7 @@ void output_task_defines(void)
{ {
text("/* MIPS task_struct offsets. */"); text("/* MIPS task_struct offsets. */");
offset("#define TASK_STATE ", struct task_struct, state); offset("#define TASK_STATE ", struct task_struct, state);
offset("#define TASK_THREAD_INFO ", struct task_struct, thread_info); offset("#define TASK_THREAD_INFO ", struct task_struct, stack);
offset("#define TASK_FLAGS ", struct task_struct, flags); offset("#define TASK_FLAGS ", struct task_struct, flags);
offset("#define TASK_MM ", struct task_struct, mm); offset("#define TASK_MM ", struct task_struct, mm);
offset("#define TASK_PID ", struct task_struct, pid); offset("#define TASK_PID ", struct task_struct, pid);
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
int main(void) int main(void)
{ {
DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, thread_info)); DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
DEFINE(TASK_STATE, offsetof(struct task_struct, state)); DEFINE(TASK_STATE, offsetof(struct task_struct, state));
DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags));
DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending)); DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending));
......
...@@ -58,7 +58,7 @@ int main(void) ...@@ -58,7 +58,7 @@ int main(void)
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context)); DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
#else #else
DEFINE(THREAD_INFO, offsetof(struct task_struct, thread_info)); DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
DEFINE(PTRACE, offsetof(struct task_struct, ptrace)); DEFINE(PTRACE, offsetof(struct task_struct, ptrace));
#endif /* CONFIG_PPC64 */ #endif /* CONFIG_PPC64 */
......
...@@ -35,7 +35,7 @@ int ...@@ -35,7 +35,7 @@ int
main(void) main(void)
{ {
DEFINE(THREAD, offsetof(struct task_struct, thread)); DEFINE(THREAD, offsetof(struct task_struct, thread));
DEFINE(THREAD_INFO, offsetof(struct task_struct, thread_info)); DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
DEFINE(MM, offsetof(struct task_struct, mm)); DEFINE(MM, offsetof(struct task_struct, mm));
DEFINE(PTRACE, offsetof(struct task_struct, ptrace)); DEFINE(PTRACE, offsetof(struct task_struct, ptrace));
DEFINE(KSP, offsetof(struct thread_struct, ksp)); DEFINE(KSP, offsetof(struct thread_struct, ksp));
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
int main(void) int main(void)
{ {
DEFINE(__THREAD_info, offsetof(struct task_struct, thread_info),); DEFINE(__THREAD_info, offsetof(struct task_struct, stack),);
DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp),); DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp),);
DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info),); DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info),);
DEFINE(__THREAD_mm_segment, DEFINE(__THREAD_mm_segment,
......
...@@ -28,7 +28,7 @@ int foo(void) ...@@ -28,7 +28,7 @@ int foo(void)
DEFINE(AOFF_task_gid, offsetof(struct task_struct, gid)); DEFINE(AOFF_task_gid, offsetof(struct task_struct, gid));
DEFINE(AOFF_task_euid, offsetof(struct task_struct, euid)); DEFINE(AOFF_task_euid, offsetof(struct task_struct, euid));
DEFINE(AOFF_task_egid, offsetof(struct task_struct, egid)); DEFINE(AOFF_task_egid, offsetof(struct task_struct, egid));
/* DEFINE(THREAD_INFO, offsetof(struct task_struct, thread_info)); */ /* DEFINE(THREAD_INFO, offsetof(struct task_struct, stack)); */
DEFINE(ASIZ_task_uid, sizeof(current->uid)); DEFINE(ASIZ_task_uid, sizeof(current->uid));
DEFINE(ASIZ_task_gid, sizeof(current->gid)); DEFINE(ASIZ_task_gid, sizeof(current->gid));
DEFINE(ASIZ_task_euid, sizeof(current->euid)); DEFINE(ASIZ_task_euid, sizeof(current->euid));
......
...@@ -29,7 +29,7 @@ int main (void) ...@@ -29,7 +29,7 @@ int main (void)
DEFINE (TASK_PTRACE, offsetof (struct task_struct, ptrace)); DEFINE (TASK_PTRACE, offsetof (struct task_struct, ptrace));
DEFINE (TASK_BLOCKED, offsetof (struct task_struct, blocked)); DEFINE (TASK_BLOCKED, offsetof (struct task_struct, blocked));
DEFINE (TASK_THREAD, offsetof (struct task_struct, thread)); DEFINE (TASK_THREAD, offsetof (struct task_struct, thread));
DEFINE (TASK_THREAD_INFO, offsetof (struct task_struct, thread_info)); DEFINE (TASK_THREAD_INFO, offsetof (struct task_struct, stack));
DEFINE (TASK_MM, offsetof (struct task_struct, mm)); DEFINE (TASK_MM, offsetof (struct task_struct, mm));
DEFINE (TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm)); DEFINE (TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm));
DEFINE (TASK_PID, offsetof (struct task_struct, pid)); DEFINE (TASK_PID, offsetof (struct task_struct, pid));
......
...@@ -70,7 +70,7 @@ int main(void) ...@@ -70,7 +70,7 @@ int main(void)
DEFINE(TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm)); DEFINE(TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm));
DEFINE(TASK_PID, offsetof (struct task_struct, pid)); DEFINE(TASK_PID, offsetof (struct task_struct, pid));
DEFINE(TASK_THREAD, offsetof (struct task_struct, thread)); DEFINE(TASK_THREAD, offsetof (struct task_struct, thread));
DEFINE(TASK_THREAD_INFO, offsetof (struct task_struct, thread_info)); DEFINE(TASK_THREAD_INFO, offsetof (struct task_struct, stack));
DEFINE(TASK_STRUCT_SIZE, sizeof (struct task_struct)); DEFINE(TASK_STRUCT_SIZE, sizeof (struct task_struct));
BLANK(); BLANK();
......
...@@ -97,7 +97,7 @@ register struct thread_info *__current_thread_info __asm__("$8"); ...@@ -97,7 +97,7 @@ register struct thread_info *__current_thread_info __asm__("$8");
1 << TIF_UAC_SIGBUS) 1 << TIF_UAC_SIGBUS)
#define SET_UNALIGN_CTL(task,value) ({ \ #define SET_UNALIGN_CTL(task,value) ({ \
(task)->thread_info->flags = (((task)->thread_info->flags & \ task_thread_info(task)->flags = ((task_thread_info(task)->flags & \
~ALPHA_UAC_MASK) \ ~ALPHA_UAC_MASK) \
| (((value) << ALPHA_UAC_SHIFT) & (1<<TIF_UAC_NOPRINT))\ | (((value) << ALPHA_UAC_SHIFT) & (1<<TIF_UAC_NOPRINT))\
| (((value) << (ALPHA_UAC_SHIFT + 1)) & (1<<TIF_UAC_SIGBUS)) \ | (((value) << (ALPHA_UAC_SHIFT + 1)) & (1<<TIF_UAC_SIGBUS)) \
...@@ -105,11 +105,11 @@ register struct thread_info *__current_thread_info __asm__("$8"); ...@@ -105,11 +105,11 @@ register struct thread_info *__current_thread_info __asm__("$8");
0; }) 0; })
#define GET_UNALIGN_CTL(task,value) ({ \ #define GET_UNALIGN_CTL(task,value) ({ \
put_user(((task)->thread_info->flags & (1 << TIF_UAC_NOPRINT)) \ put_user((task_thread_info(task)->flags & (1 << TIF_UAC_NOPRINT))\
>> ALPHA_UAC_SHIFT \ >> ALPHA_UAC_SHIFT \
| ((task)->thread_info->flags & (1 << TIF_UAC_SIGBUS)) \ | (task_thread_info(task)->flags & (1 << TIF_UAC_SIGBUS))\
>> (ALPHA_UAC_SHIFT + 1) \ >> (ALPHA_UAC_SHIFT + 1) \
| ((task)->thread_info->flags & (1 << TIF_UAC_NOFIX)) \ | (task_thread_info(task)->flags & (1 << TIF_UAC_NOFIX))\
>> (ALPHA_UAC_SHIFT - 1), \ >> (ALPHA_UAC_SHIFT - 1), \
(int __user *)(value)); \ (int __user *)(value)); \
}) })
......
...@@ -58,10 +58,10 @@ do { \ ...@@ -58,10 +58,10 @@ do { \
(_regs)->pc = (_pc); \ (_regs)->pc = (_pc); \
if (current->mm) \ if (current->mm) \
(_regs)->p5 = current->mm->start_data; \ (_regs)->p5 = current->mm->start_data; \
current->thread_info->l1_task_info.stack_start \ task_thread_info(current)->l1_task_info.stack_start \
= (void *)current->mm->context.stack_start; \ = (void *)current->mm->context.stack_start; \
current->thread_info->l1_task_info.lowest_sp = (void *)(_usp); \ task_thread_info(current)->l1_task_info.lowest_sp = (void *)(_usp); \
memcpy(L1_SCRATCH_TASK_INFO, &current->thread_info->l1_task_info, \ memcpy(L1_SCRATCH_TASK_INFO, &task_thread_info(current)->l1_task_info, \
sizeof(*L1_SCRATCH_TASK_INFO)); \ sizeof(*L1_SCRATCH_TASK_INFO)); \
wrusp(_usp); \ wrusp(_usp); \
} while(0) } while(0)
......
...@@ -239,9 +239,9 @@ asmlinkage struct task_struct *resume(struct task_struct *prev, struct task_stru ...@@ -239,9 +239,9 @@ asmlinkage struct task_struct *resume(struct task_struct *prev, struct task_stru
#define switch_to(prev,next,last) \ #define switch_to(prev,next,last) \
do { \ do { \
memcpy (&prev->thread_info->l1_task_info, L1_SCRATCH_TASK_INFO, \ memcpy (&task_thread_info(prev)->l1_task_info, L1_SCRATCH_TASK_INFO, \
sizeof *L1_SCRATCH_TASK_INFO); \ sizeof *L1_SCRATCH_TASK_INFO); \
memcpy (L1_SCRATCH_TASK_INFO, &next->thread_info->l1_task_info, \ memcpy (L1_SCRATCH_TASK_INFO, &task_thread_info(next)->l1_task_info, \
sizeof *L1_SCRATCH_TASK_INFO); \ sizeof *L1_SCRATCH_TASK_INFO); \
(last) = resume (prev, next); \ (last) = resume (prev, next); \
} while (0) } while (0)
......
...@@ -37,17 +37,17 @@ struct thread_info { ...@@ -37,17 +37,17 @@ struct thread_info {
#define init_stack (init_thread_union.stack) #define init_stack (init_thread_union.stack)
#define task_thread_info(tsk) (&(tsk)->thread.info) #define task_thread_info(tsk) (&(tsk)->thread.info)
#define task_stack_page(tsk) ((void *)(tsk)->thread_info) #define task_stack_page(tsk) ((tsk)->stack)
#define current_thread_info() task_thread_info(current) #define current_thread_info() task_thread_info(current)
#define __HAVE_THREAD_FUNCTIONS #define __HAVE_THREAD_FUNCTIONS
#define setup_thread_stack(p, org) ({ \ #define setup_thread_stack(p, org) ({ \
*(struct task_struct **)(p)->thread_info = (p); \ *(struct task_struct **)(p)->stack = (p); \
task_thread_info(p)->task = (p); \ task_thread_info(p)->task = (p); \
}) })
#define end_of_stack(p) ((unsigned long *)(p)->thread_info + 1) #define end_of_stack(p) ((unsigned long *)(p)->stack + 1)
/* entry.S relies on these definitions! /* entry.S relies on these definitions!
* bits 0-7 are tested at every exception exit * bits 0-7 are tested at every exception exit
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
[threadrsp] "i" (offsetof(struct task_struct, thread.rsp)), \ [threadrsp] "i" (offsetof(struct task_struct, thread.rsp)), \
[ti_flags] "i" (offsetof(struct thread_info, flags)),\ [ti_flags] "i" (offsetof(struct thread_info, flags)),\
[tif_fork] "i" (TIF_FORK), \ [tif_fork] "i" (TIF_FORK), \
[thread_info] "i" (offsetof(struct task_struct, thread_info)), \ [thread_info] "i" (offsetof(struct task_struct, stack)), \
[pda_pcurrent] "i" (offsetof(struct x8664_pda, pcurrent)) \ [pda_pcurrent] "i" (offsetof(struct x8664_pda, pcurrent)) \
: "memory", "cc" __EXTRA_CLOBBER) : "memory", "cc" __EXTRA_CLOBBER)
......
...@@ -95,7 +95,7 @@ extern struct group_info init_groups; ...@@ -95,7 +95,7 @@ extern struct group_info init_groups;
#define INIT_TASK(tsk) \ #define INIT_TASK(tsk) \
{ \ { \
.state = 0, \ .state = 0, \
.thread_info = &init_thread_info, \ .stack = &init_thread_info, \
.usage = ATOMIC_INIT(2), \ .usage = ATOMIC_INIT(2), \
.flags = 0, \ .flags = 0, \
.lock_depth = -1, \ .lock_depth = -1, \
......
...@@ -817,7 +817,7 @@ struct prio_array; ...@@ -817,7 +817,7 @@ struct prio_array;
struct task_struct { struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
struct thread_info *thread_info; void *stack;
atomic_t usage; atomic_t usage;
unsigned int flags; /* per process flags, defined below */ unsigned int flags; /* per process flags, defined below */
unsigned int ptrace; unsigned int ptrace;
...@@ -1513,8 +1513,8 @@ static inline void unlock_task_sighand(struct task_struct *tsk, ...@@ -1513,8 +1513,8 @@ static inline void unlock_task_sighand(struct task_struct *tsk,
#ifndef __HAVE_THREAD_FUNCTIONS #ifndef __HAVE_THREAD_FUNCTIONS
#define task_thread_info(task) (task)->thread_info #define task_thread_info(task) ((struct thread_info *)(task)->stack)
#define task_stack_page(task) ((void*)((task)->thread_info)) #define task_stack_page(task) ((task)->stack)
static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org) static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org)
{ {
...@@ -1524,7 +1524,7 @@ static inline void setup_thread_stack(struct task_struct *p, struct task_struct ...@@ -1524,7 +1524,7 @@ static inline void setup_thread_stack(struct task_struct *p, struct task_struct
static inline unsigned long *end_of_stack(struct task_struct *p) static inline unsigned long *end_of_stack(struct task_struct *p)
{ {
return (unsigned long *)(p->thread_info + 1); return (unsigned long *)(task_thread_info(p) + 1);
} }
#endif #endif
......
...@@ -105,7 +105,7 @@ static struct kmem_cache *mm_cachep; ...@@ -105,7 +105,7 @@ static struct kmem_cache *mm_cachep;
void free_task(struct task_struct *tsk) void free_task(struct task_struct *tsk)
{ {
free_thread_info(tsk->thread_info); free_thread_info(tsk->stack);
rt_mutex_debug_task_free(tsk); rt_mutex_debug_task_free(tsk);
free_task_struct(tsk); free_task_struct(tsk);
} }
...@@ -175,7 +175,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) ...@@ -175,7 +175,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
} }
*tsk = *orig; *tsk = *orig;
tsk->thread_info = ti; tsk->stack = ti;
setup_thread_stack(tsk, orig); setup_thread_stack(tsk, orig);
#ifdef CONFIG_CC_STACKPROTECTOR #ifdef CONFIG_CC_STACKPROTECTOR
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment