Commit f7e4217b007d1f73e7e3cf10ba4fea4a608c603f

Authored by Roman Zippel
Committed by Linus Torvalds
1 parent c9f4f06d31

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: Roman 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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 19 changed files with 33 additions and 33 deletions Side-by-side Diff

arch/blackfin/kernel/ptrace.c
... ... @@ -73,7 +73,7 @@
73 73 static inline struct pt_regs *get_user_regs(struct task_struct *task)
74 74 {
75 75 return (struct pt_regs *)
76   - ((unsigned long)task->thread_info +
  76 + ((unsigned long)task_stack_page(task) +
77 77 (THREAD_SIZE - sizeof(struct pt_regs)));
78 78 }
79 79  
... ... @@ -99,7 +99,7 @@
99 99 unsigned char *reg_ptr;
100 100  
101 101 struct pt_regs *regs =
102   - (struct pt_regs *)((unsigned long)task->thread_info +
  102 + (struct pt_regs *)((unsigned long)task_stack_page(task) +
103 103 (THREAD_SIZE - sizeof(struct pt_regs)));
104 104 reg_ptr = (char *)regs;
105 105  
... ... @@ -125,7 +125,7 @@
125 125 char * reg_ptr;
126 126  
127 127 struct pt_regs *regs =
128   - (struct pt_regs *)((unsigned long)task->thread_info +
  128 + (struct pt_regs *)((unsigned long)task_stack_page(task) +
129 129 (THREAD_SIZE - sizeof(struct pt_regs)));
130 130 reg_ptr = (char *)regs;
131 131  
arch/h8300/kernel/asm-offsets.c
... ... @@ -30,7 +30,7 @@
30 30 DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace));
31 31 DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked));
32 32 DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));
33   - DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, thread_info));
  33 + DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
34 34 DEFINE(TASK_MM, offsetof(struct task_struct, mm));
35 35 DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));
36 36  
arch/ia64/kernel/mca.c
... ... @@ -1689,7 +1689,7 @@
1689 1689 ti->preempt_count = 1;
1690 1690 ti->task = p;
1691 1691 ti->cpu = cpu;
1692   - p->thread_info = ti;
  1692 + p->stack = ti;
1693 1693 p->state = TASK_UNINTERRUPTIBLE;
1694 1694 cpu_set(cpu, p->cpus_allowed);
1695 1695 INIT_LIST_HEAD(&p->tasks);
arch/mips/kernel/asm-offsets.c
... ... @@ -82,7 +82,7 @@
82 82 {
83 83 text("/* MIPS task_struct offsets. */");
84 84 offset("#define TASK_STATE ", struct task_struct, state);
85   - offset("#define TASK_THREAD_INFO ", struct task_struct, thread_info);
  85 + offset("#define TASK_THREAD_INFO ", struct task_struct, stack);
86 86 offset("#define TASK_FLAGS ", struct task_struct, flags);
87 87 offset("#define TASK_MM ", struct task_struct, mm);
88 88 offset("#define TASK_PID ", struct task_struct, pid);
arch/parisc/kernel/asm-offsets.c
... ... @@ -54,7 +54,7 @@
54 54  
55 55 int main(void)
56 56 {
57   - DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, thread_info));
  57 + DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
58 58 DEFINE(TASK_STATE, offsetof(struct task_struct, state));
59 59 DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags));
60 60 DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending));
arch/powerpc/kernel/asm-offsets.c
... ... @@ -58,7 +58,7 @@
58 58 #ifdef CONFIG_PPC64
59 59 DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
60 60 #else
61   - DEFINE(THREAD_INFO, offsetof(struct task_struct, thread_info));
  61 + DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
62 62 DEFINE(PTRACE, offsetof(struct task_struct, ptrace));
63 63 #endif /* CONFIG_PPC64 */
64 64  
arch/ppc/kernel/asm-offsets.c
... ... @@ -35,7 +35,7 @@
35 35 main(void)
36 36 {
37 37 DEFINE(THREAD, offsetof(struct task_struct, thread));
38   - DEFINE(THREAD_INFO, offsetof(struct task_struct, thread_info));
  38 + DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
39 39 DEFINE(MM, offsetof(struct task_struct, mm));
40 40 DEFINE(PTRACE, offsetof(struct task_struct, ptrace));
41 41 DEFINE(KSP, offsetof(struct thread_struct, ksp));
arch/s390/kernel/asm-offsets.c
... ... @@ -15,7 +15,7 @@
15 15  
16 16 int main(void)
17 17 {
18   - DEFINE(__THREAD_info, offsetof(struct task_struct, thread_info),);
  18 + DEFINE(__THREAD_info, offsetof(struct task_struct, stack),);
19 19 DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp),);
20 20 DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info),);
21 21 DEFINE(__THREAD_mm_segment,
arch/sparc/kernel/asm-offsets.c
... ... @@ -28,7 +28,7 @@
28 28 DEFINE(AOFF_task_gid, offsetof(struct task_struct, gid));
29 29 DEFINE(AOFF_task_euid, offsetof(struct task_struct, euid));
30 30 DEFINE(AOFF_task_egid, offsetof(struct task_struct, egid));
31   - /* DEFINE(THREAD_INFO, offsetof(struct task_struct, thread_info)); */
  31 + /* DEFINE(THREAD_INFO, offsetof(struct task_struct, stack)); */
32 32 DEFINE(ASIZ_task_uid, sizeof(current->uid));
33 33 DEFINE(ASIZ_task_gid, sizeof(current->gid));
34 34 DEFINE(ASIZ_task_euid, sizeof(current->euid));
arch/v850/kernel/asm-offsets.c
... ... @@ -29,7 +29,7 @@
29 29 DEFINE (TASK_PTRACE, offsetof (struct task_struct, ptrace));
30 30 DEFINE (TASK_BLOCKED, offsetof (struct task_struct, blocked));
31 31 DEFINE (TASK_THREAD, offsetof (struct task_struct, thread));
32   - DEFINE (TASK_THREAD_INFO, offsetof (struct task_struct, thread_info));
  32 + DEFINE (TASK_THREAD_INFO, offsetof (struct task_struct, stack));
33 33 DEFINE (TASK_MM, offsetof (struct task_struct, mm));
34 34 DEFINE (TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm));
35 35 DEFINE (TASK_PID, offsetof (struct task_struct, pid));
arch/xtensa/kernel/asm-offsets.c
... ... @@ -70,7 +70,7 @@
70 70 DEFINE(TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm));
71 71 DEFINE(TASK_PID, offsetof (struct task_struct, pid));
72 72 DEFINE(TASK_THREAD, offsetof (struct task_struct, thread));
73   - DEFINE(TASK_THREAD_INFO, offsetof (struct task_struct, thread_info));
  73 + DEFINE(TASK_THREAD_INFO, offsetof (struct task_struct, stack));
74 74 DEFINE(TASK_STRUCT_SIZE, sizeof (struct task_struct));
75 75 BLANK();
76 76  
include/asm-alpha/thread_info.h
... ... @@ -97,7 +97,7 @@
97 97 1 << TIF_UAC_SIGBUS)
98 98  
99 99 #define SET_UNALIGN_CTL(task,value) ({ \
100   - (task)->thread_info->flags = (((task)->thread_info->flags & \
  100 + task_thread_info(task)->flags = ((task_thread_info(task)->flags & \
101 101 ~ALPHA_UAC_MASK) \
102 102 | (((value) << ALPHA_UAC_SHIFT) & (1<<TIF_UAC_NOPRINT))\
103 103 | (((value) << (ALPHA_UAC_SHIFT + 1)) & (1<<TIF_UAC_SIGBUS)) \
104 104  
105 105  
... ... @@ -105,11 +105,11 @@
105 105 0; })
106 106  
107 107 #define GET_UNALIGN_CTL(task,value) ({ \
108   - put_user(((task)->thread_info->flags & (1 << TIF_UAC_NOPRINT)) \
  108 + put_user((task_thread_info(task)->flags & (1 << TIF_UAC_NOPRINT))\
109 109 >> ALPHA_UAC_SHIFT \
110   - | ((task)->thread_info->flags & (1 << TIF_UAC_SIGBUS)) \
  110 + | (task_thread_info(task)->flags & (1 << TIF_UAC_SIGBUS))\
111 111 >> (ALPHA_UAC_SHIFT + 1) \
112   - | ((task)->thread_info->flags & (1 << TIF_UAC_NOFIX)) \
  112 + | (task_thread_info(task)->flags & (1 << TIF_UAC_NOFIX))\
113 113 >> (ALPHA_UAC_SHIFT - 1), \
114 114 (int __user *)(value)); \
115 115 })
include/asm-blackfin/processor.h
... ... @@ -58,10 +58,10 @@
58 58 (_regs)->pc = (_pc); \
59 59 if (current->mm) \
60 60 (_regs)->p5 = current->mm->start_data; \
61   - current->thread_info->l1_task_info.stack_start \
  61 + task_thread_info(current)->l1_task_info.stack_start \
62 62 = (void *)current->mm->context.stack_start; \
63   - current->thread_info->l1_task_info.lowest_sp = (void *)(_usp); \
64   - memcpy(L1_SCRATCH_TASK_INFO, &current->thread_info->l1_task_info, \
  63 + task_thread_info(current)->l1_task_info.lowest_sp = (void *)(_usp); \
  64 + memcpy(L1_SCRATCH_TASK_INFO, &task_thread_info(current)->l1_task_info, \
65 65 sizeof(*L1_SCRATCH_TASK_INFO)); \
66 66 wrusp(_usp); \
67 67 } while(0)
include/asm-blackfin/system.h
... ... @@ -239,9 +239,9 @@
239 239  
240 240 #define switch_to(prev,next,last) \
241 241 do { \
242   - memcpy (&prev->thread_info->l1_task_info, L1_SCRATCH_TASK_INFO, \
  242 + memcpy (&task_thread_info(prev)->l1_task_info, L1_SCRATCH_TASK_INFO, \
243 243 sizeof *L1_SCRATCH_TASK_INFO); \
244   - memcpy (L1_SCRATCH_TASK_INFO, &next->thread_info->l1_task_info, \
  244 + memcpy (L1_SCRATCH_TASK_INFO, &task_thread_info(next)->l1_task_info, \
245 245 sizeof *L1_SCRATCH_TASK_INFO); \
246 246 (last) = resume (prev, next); \
247 247 } while (0)
include/asm-m68k/thread_info.h
... ... @@ -37,17 +37,17 @@
37 37 #define init_stack (init_thread_union.stack)
38 38  
39 39 #define task_thread_info(tsk) (&(tsk)->thread.info)
40   -#define task_stack_page(tsk) ((void *)(tsk)->thread_info)
  40 +#define task_stack_page(tsk) ((tsk)->stack)
41 41 #define current_thread_info() task_thread_info(current)
42 42  
43 43 #define __HAVE_THREAD_FUNCTIONS
44 44  
45 45 #define setup_thread_stack(p, org) ({ \
46   - *(struct task_struct **)(p)->thread_info = (p); \
  46 + *(struct task_struct **)(p)->stack = (p); \
47 47 task_thread_info(p)->task = (p); \
48 48 })
49 49  
50   -#define end_of_stack(p) ((unsigned long *)(p)->thread_info + 1)
  50 +#define end_of_stack(p) ((unsigned long *)(p)->stack + 1)
51 51  
52 52 /* entry.S relies on these definitions!
53 53 * bits 0-7 are tested at every exception exit
include/asm-x86_64/system.h
... ... @@ -39,7 +39,7 @@
39 39 [threadrsp] "i" (offsetof(struct task_struct, thread.rsp)), \
40 40 [ti_flags] "i" (offsetof(struct thread_info, flags)),\
41 41 [tif_fork] "i" (TIF_FORK), \
42   - [thread_info] "i" (offsetof(struct task_struct, thread_info)), \
  42 + [thread_info] "i" (offsetof(struct task_struct, stack)), \
43 43 [pda_pcurrent] "i" (offsetof(struct x8664_pda, pcurrent)) \
44 44 : "memory", "cc" __EXTRA_CLOBBER)
45 45  
include/linux/init_task.h
... ... @@ -95,7 +95,7 @@
95 95 #define INIT_TASK(tsk) \
96 96 { \
97 97 .state = 0, \
98   - .thread_info = &init_thread_info, \
  98 + .stack = &init_thread_info, \
99 99 .usage = ATOMIC_INIT(2), \
100 100 .flags = 0, \
101 101 .lock_depth = -1, \
include/linux/sched.h
... ... @@ -817,7 +817,7 @@
817 817  
818 818 struct task_struct {
819 819 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
820   - struct thread_info *thread_info;
  820 + void *stack;
821 821 atomic_t usage;
822 822 unsigned int flags; /* per process flags, defined below */
823 823 unsigned int ptrace;
... ... @@ -1513,8 +1513,8 @@
1513 1513  
1514 1514 #ifndef __HAVE_THREAD_FUNCTIONS
1515 1515  
1516   -#define task_thread_info(task) (task)->thread_info
1517   -#define task_stack_page(task) ((void*)((task)->thread_info))
  1516 +#define task_thread_info(task) ((struct thread_info *)(task)->stack)
  1517 +#define task_stack_page(task) ((task)->stack)
1518 1518  
1519 1519 static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org)
1520 1520 {
... ... @@ -1524,7 +1524,7 @@
1524 1524  
1525 1525 static inline unsigned long *end_of_stack(struct task_struct *p)
1526 1526 {
1527   - return (unsigned long *)(p->thread_info + 1);
  1527 + return (unsigned long *)(task_thread_info(p) + 1);
1528 1528 }
1529 1529  
1530 1530 #endif
... ... @@ -105,7 +105,7 @@
105 105  
106 106 void free_task(struct task_struct *tsk)
107 107 {
108   - free_thread_info(tsk->thread_info);
  108 + free_thread_info(tsk->stack);
109 109 rt_mutex_debug_task_free(tsk);
110 110 free_task_struct(tsk);
111 111 }
... ... @@ -175,7 +175,7 @@
175 175 }
176 176  
177 177 *tsk = *orig;
178   - tsk->thread_info = ti;
  178 + tsk->stack = ti;
179 179 setup_thread_stack(tsk, orig);
180 180  
181 181 #ifdef CONFIG_CC_STACKPROTECTOR