Commit f7e4217b007d1f73e7e3cf10ba4fea4a608c603f
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
- arch/h8300/kernel/asm-offsets.c
- arch/ia64/kernel/mca.c
- arch/mips/kernel/asm-offsets.c
- arch/parisc/kernel/asm-offsets.c
- arch/powerpc/kernel/asm-offsets.c
- arch/ppc/kernel/asm-offsets.c
- arch/s390/kernel/asm-offsets.c
- arch/sparc/kernel/asm-offsets.c
- arch/v850/kernel/asm-offsets.c
- arch/xtensa/kernel/asm-offsets.c
- include/asm-alpha/thread_info.h
- include/asm-blackfin/processor.h
- include/asm-blackfin/system.h
- include/asm-m68k/thread_info.h
- include/asm-x86_64/system.h
- include/linux/init_task.h
- include/linux/sched.h
- kernel/fork.c
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
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, ¤t->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
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 |
kernel/fork.c
... | ... | @@ -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 |