diff options
author | Roman Zippel <zippel@linux-m68k.org> | 2007-05-09 05:35:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-09 15:30:56 -0400 |
commit | f7e4217b007d1f73e7e3cf10ba4fea4a608c603f (patch) | |
tree | 9c3932bb871d4b6727dc588e4d6c9987637aaee5 | |
parent | c9f4f06d3191bd91c1a081b54a6c8e913e7b8a83 (diff) |
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>
-rw-r--r-- | arch/blackfin/kernel/ptrace.c | 6 | ||||
-rw-r--r-- | arch/h8300/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/mca.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/ppc/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/v850/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | arch/xtensa/kernel/asm-offsets.c | 2 | ||||
-rw-r--r-- | include/asm-alpha/thread_info.h | 8 | ||||
-rw-r--r-- | include/asm-blackfin/processor.h | 6 | ||||
-rw-r--r-- | include/asm-blackfin/system.h | 4 | ||||
-rw-r--r-- | include/asm-m68k/thread_info.h | 6 | ||||
-rw-r--r-- | include/asm-x86_64/system.h | 2 | ||||
-rw-r--r-- | include/linux/init_task.h | 2 | ||||
-rw-r--r-- | include/linux/sched.h | 8 | ||||
-rw-r--r-- | kernel/fork.c | 4 |
19 files changed, 33 insertions, 33 deletions
diff --git a/arch/blackfin/kernel/ptrace.c b/arch/blackfin/kernel/ptrace.c index d7c8e514cb92..e718bb4a1ef0 100644 --- a/arch/blackfin/kernel/ptrace.c +++ b/arch/blackfin/kernel/ptrace.c | |||
@@ -73,7 +73,7 @@ | |||
73 | static inline struct pt_regs *get_user_regs(struct task_struct *task) | 73 | static inline struct pt_regs *get_user_regs(struct task_struct *task) |
74 | { | 74 | { |
75 | return (struct pt_regs *) | 75 | return (struct pt_regs *) |
76 | ((unsigned long)task->thread_info + | 76 | ((unsigned long)task_stack_page(task) + |
77 | (THREAD_SIZE - sizeof(struct pt_regs))); | 77 | (THREAD_SIZE - sizeof(struct pt_regs))); |
78 | } | 78 | } |
79 | 79 | ||
@@ -99,7 +99,7 @@ static inline long get_reg(struct task_struct *task, int regno) | |||
99 | unsigned char *reg_ptr; | 99 | unsigned char *reg_ptr; |
100 | 100 | ||
101 | struct pt_regs *regs = | 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 | (THREAD_SIZE - sizeof(struct pt_regs))); | 103 | (THREAD_SIZE - sizeof(struct pt_regs))); |
104 | reg_ptr = (char *)regs; | 104 | reg_ptr = (char *)regs; |
105 | 105 | ||
@@ -125,7 +125,7 @@ put_reg(struct task_struct *task, int regno, unsigned long data) | |||
125 | char * reg_ptr; | 125 | char * reg_ptr; |
126 | 126 | ||
127 | struct pt_regs *regs = | 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 | (THREAD_SIZE - sizeof(struct pt_regs))); | 129 | (THREAD_SIZE - sizeof(struct pt_regs))); |
130 | reg_ptr = (char *)regs; | 130 | reg_ptr = (char *)regs; |
131 | 131 | ||
diff --git a/arch/h8300/kernel/asm-offsets.c b/arch/h8300/kernel/asm-offsets.c index b78b82ad28a3..fc30b4fd0914 100644 --- a/arch/h8300/kernel/asm-offsets.c +++ b/arch/h8300/kernel/asm-offsets.c | |||
@@ -30,7 +30,7 @@ int main(void) | |||
30 | DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); | 30 | DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); |
31 | DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked)); | 31 | DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked)); |
32 | DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); | 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 | DEFINE(TASK_MM, offsetof(struct task_struct, mm)); | 34 | DEFINE(TASK_MM, offsetof(struct task_struct, mm)); |
35 | DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); | 35 | DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); |
36 | 36 | ||
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 1d7cc7e2ce32..f8ae709de0b5 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c | |||
@@ -1689,7 +1689,7 @@ format_mca_init_stack(void *mca_data, unsigned long offset, | |||
1689 | ti->preempt_count = 1; | 1689 | ti->preempt_count = 1; |
1690 | ti->task = p; | 1690 | ti->task = p; |
1691 | ti->cpu = cpu; | 1691 | ti->cpu = cpu; |
1692 | p->thread_info = ti; | 1692 | p->stack = ti; |
1693 | p->state = TASK_UNINTERRUPTIBLE; | 1693 | p->state = TASK_UNINTERRUPTIBLE; |
1694 | cpu_set(cpu, p->cpus_allowed); | 1694 | cpu_set(cpu, p->cpus_allowed); |
1695 | INIT_LIST_HEAD(&p->tasks); | 1695 | INIT_LIST_HEAD(&p->tasks); |
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index 761a779d5c4f..3b27309d54b1 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c | |||
@@ -82,7 +82,7 @@ void output_task_defines(void) | |||
82 | { | 82 | { |
83 | text("/* MIPS task_struct offsets. */"); | 83 | text("/* MIPS task_struct offsets. */"); |
84 | offset("#define TASK_STATE ", struct task_struct, state); | 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 | offset("#define TASK_FLAGS ", struct task_struct, flags); | 86 | offset("#define TASK_FLAGS ", struct task_struct, flags); |
87 | offset("#define TASK_MM ", struct task_struct, mm); | 87 | offset("#define TASK_MM ", struct task_struct, mm); |
88 | offset("#define TASK_PID ", struct task_struct, pid); | 88 | offset("#define TASK_PID ", struct task_struct, pid); |
diff --git a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c index 54fdb959149c..d3b7917a87cb 100644 --- a/arch/parisc/kernel/asm-offsets.c +++ b/arch/parisc/kernel/asm-offsets.c | |||
@@ -54,7 +54,7 @@ | |||
54 | 54 | ||
55 | int main(void) | 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 | DEFINE(TASK_STATE, offsetof(struct task_struct, state)); | 58 | DEFINE(TASK_STATE, offsetof(struct task_struct, state)); |
59 | DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); | 59 | DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); |
60 | DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending)); | 60 | DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending)); |
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 8f48560b7ee2..37bc35e69dbe 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -58,7 +58,7 @@ int main(void) | |||
58 | #ifdef CONFIG_PPC64 | 58 | #ifdef CONFIG_PPC64 |
59 | DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context)); | 59 | DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context)); |
60 | #else | 60 | #else |
61 | DEFINE(THREAD_INFO, offsetof(struct task_struct, thread_info)); | 61 | DEFINE(THREAD_INFO, offsetof(struct task_struct, stack)); |
62 | DEFINE(PTRACE, offsetof(struct task_struct, ptrace)); | 62 | DEFINE(PTRACE, offsetof(struct task_struct, ptrace)); |
63 | #endif /* CONFIG_PPC64 */ | 63 | #endif /* CONFIG_PPC64 */ |
64 | 64 | ||
diff --git a/arch/ppc/kernel/asm-offsets.c b/arch/ppc/kernel/asm-offsets.c index c5850a272650..e8e94321b59e 100644 --- a/arch/ppc/kernel/asm-offsets.c +++ b/arch/ppc/kernel/asm-offsets.c | |||
@@ -35,7 +35,7 @@ int | |||
35 | main(void) | 35 | main(void) |
36 | { | 36 | { |
37 | DEFINE(THREAD, offsetof(struct task_struct, thread)); | 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 | DEFINE(MM, offsetof(struct task_struct, mm)); | 39 | DEFINE(MM, offsetof(struct task_struct, mm)); |
40 | DEFINE(PTRACE, offsetof(struct task_struct, ptrace)); | 40 | DEFINE(PTRACE, offsetof(struct task_struct, ptrace)); |
41 | DEFINE(KSP, offsetof(struct thread_struct, ksp)); | 41 | DEFINE(KSP, offsetof(struct thread_struct, ksp)); |
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index ec514fe5ccd0..1375f8a4469e 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c | |||
@@ -15,7 +15,7 @@ | |||
15 | 15 | ||
16 | int main(void) | 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 | DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp),); | 19 | DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp),); |
20 | DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info),); | 20 | DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info),); |
21 | DEFINE(__THREAD_mm_segment, | 21 | DEFINE(__THREAD_mm_segment, |
diff --git a/arch/sparc/kernel/asm-offsets.c b/arch/sparc/kernel/asm-offsets.c index 29d7cfd1c970..6773ed76e414 100644 --- a/arch/sparc/kernel/asm-offsets.c +++ b/arch/sparc/kernel/asm-offsets.c | |||
@@ -28,7 +28,7 @@ int foo(void) | |||
28 | DEFINE(AOFF_task_gid, offsetof(struct task_struct, gid)); | 28 | DEFINE(AOFF_task_gid, offsetof(struct task_struct, gid)); |
29 | DEFINE(AOFF_task_euid, offsetof(struct task_struct, euid)); | 29 | DEFINE(AOFF_task_euid, offsetof(struct task_struct, euid)); |
30 | DEFINE(AOFF_task_egid, offsetof(struct task_struct, egid)); | 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 | DEFINE(ASIZ_task_uid, sizeof(current->uid)); | 32 | DEFINE(ASIZ_task_uid, sizeof(current->uid)); |
33 | DEFINE(ASIZ_task_gid, sizeof(current->gid)); | 33 | DEFINE(ASIZ_task_gid, sizeof(current->gid)); |
34 | DEFINE(ASIZ_task_euid, sizeof(current->euid)); | 34 | DEFINE(ASIZ_task_euid, sizeof(current->euid)); |
diff --git a/arch/v850/kernel/asm-offsets.c b/arch/v850/kernel/asm-offsets.c index 24f291369070..cee5c3142d41 100644 --- a/arch/v850/kernel/asm-offsets.c +++ b/arch/v850/kernel/asm-offsets.c | |||
@@ -29,7 +29,7 @@ int main (void) | |||
29 | DEFINE (TASK_PTRACE, offsetof (struct task_struct, ptrace)); | 29 | DEFINE (TASK_PTRACE, offsetof (struct task_struct, ptrace)); |
30 | DEFINE (TASK_BLOCKED, offsetof (struct task_struct, blocked)); | 30 | DEFINE (TASK_BLOCKED, offsetof (struct task_struct, blocked)); |
31 | DEFINE (TASK_THREAD, offsetof (struct task_struct, thread)); | 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 | DEFINE (TASK_MM, offsetof (struct task_struct, mm)); | 33 | DEFINE (TASK_MM, offsetof (struct task_struct, mm)); |
34 | DEFINE (TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm)); | 34 | DEFINE (TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm)); |
35 | DEFINE (TASK_PID, offsetof (struct task_struct, pid)); | 35 | DEFINE (TASK_PID, offsetof (struct task_struct, pid)); |
diff --git a/arch/xtensa/kernel/asm-offsets.c b/arch/xtensa/kernel/asm-offsets.c index b256cfbef344..698079b3a336 100644 --- a/arch/xtensa/kernel/asm-offsets.c +++ b/arch/xtensa/kernel/asm-offsets.c | |||
@@ -70,7 +70,7 @@ int main(void) | |||
70 | DEFINE(TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm)); | 70 | DEFINE(TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm)); |
71 | DEFINE(TASK_PID, offsetof (struct task_struct, pid)); | 71 | DEFINE(TASK_PID, offsetof (struct task_struct, pid)); |
72 | DEFINE(TASK_THREAD, offsetof (struct task_struct, thread)); | 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 | DEFINE(TASK_STRUCT_SIZE, sizeof (struct task_struct)); | 74 | DEFINE(TASK_STRUCT_SIZE, sizeof (struct task_struct)); |
75 | BLANK(); | 75 | BLANK(); |
76 | 76 | ||
diff --git a/include/asm-alpha/thread_info.h b/include/asm-alpha/thread_info.h index eeb3bef91e11..f4defc2bd3fb 100644 --- a/include/asm-alpha/thread_info.h +++ b/include/asm-alpha/thread_info.h | |||
@@ -97,7 +97,7 @@ register struct thread_info *__current_thread_info __asm__("$8"); | |||
97 | 1 << TIF_UAC_SIGBUS) | 97 | 1 << TIF_UAC_SIGBUS) |
98 | 98 | ||
99 | #define SET_UNALIGN_CTL(task,value) ({ \ | 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 | ~ALPHA_UAC_MASK) \ | 101 | ~ALPHA_UAC_MASK) \ |
102 | | (((value) << ALPHA_UAC_SHIFT) & (1<<TIF_UAC_NOPRINT))\ | 102 | | (((value) << ALPHA_UAC_SHIFT) & (1<<TIF_UAC_NOPRINT))\ |
103 | | (((value) << (ALPHA_UAC_SHIFT + 1)) & (1<<TIF_UAC_SIGBUS)) \ | 103 | | (((value) << (ALPHA_UAC_SHIFT + 1)) & (1<<TIF_UAC_SIGBUS)) \ |
@@ -105,11 +105,11 @@ register struct thread_info *__current_thread_info __asm__("$8"); | |||
105 | 0; }) | 105 | 0; }) |
106 | 106 | ||
107 | #define GET_UNALIGN_CTL(task,value) ({ \ | 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 | >> ALPHA_UAC_SHIFT \ | 109 | >> ALPHA_UAC_SHIFT \ |
110 | | ((task)->thread_info->flags & (1 << TIF_UAC_SIGBUS)) \ | 110 | | (task_thread_info(task)->flags & (1 << TIF_UAC_SIGBUS))\ |
111 | >> (ALPHA_UAC_SHIFT + 1) \ | 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 | >> (ALPHA_UAC_SHIFT - 1), \ | 113 | >> (ALPHA_UAC_SHIFT - 1), \ |
114 | (int __user *)(value)); \ | 114 | (int __user *)(value)); \ |
115 | }) | 115 | }) |
diff --git a/include/asm-blackfin/processor.h b/include/asm-blackfin/processor.h index 997465c93e82..0336ff132c16 100644 --- a/include/asm-blackfin/processor.h +++ b/include/asm-blackfin/processor.h | |||
@@ -58,10 +58,10 @@ do { \ | |||
58 | (_regs)->pc = (_pc); \ | 58 | (_regs)->pc = (_pc); \ |
59 | if (current->mm) \ | 59 | if (current->mm) \ |
60 | (_regs)->p5 = current->mm->start_data; \ | 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 | = (void *)current->mm->context.stack_start; \ | 62 | = (void *)current->mm->context.stack_start; \ |
63 | current->thread_info->l1_task_info.lowest_sp = (void *)(_usp); \ | 63 | task_thread_info(current)->l1_task_info.lowest_sp = (void *)(_usp); \ |
64 | memcpy(L1_SCRATCH_TASK_INFO, ¤t->thread_info->l1_task_info, \ | 64 | memcpy(L1_SCRATCH_TASK_INFO, &task_thread_info(current)->l1_task_info, \ |
65 | sizeof(*L1_SCRATCH_TASK_INFO)); \ | 65 | sizeof(*L1_SCRATCH_TASK_INFO)); \ |
66 | wrusp(_usp); \ | 66 | wrusp(_usp); \ |
67 | } while(0) | 67 | } while(0) |
diff --git a/include/asm-blackfin/system.h b/include/asm-blackfin/system.h index b5bf6e7cb5e8..5e5f1a0566c0 100644 --- a/include/asm-blackfin/system.h +++ b/include/asm-blackfin/system.h | |||
@@ -239,9 +239,9 @@ asmlinkage struct task_struct *resume(struct task_struct *prev, struct task_stru | |||
239 | 239 | ||
240 | #define switch_to(prev,next,last) \ | 240 | #define switch_to(prev,next,last) \ |
241 | do { \ | 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 | sizeof *L1_SCRATCH_TASK_INFO); \ | 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 | sizeof *L1_SCRATCH_TASK_INFO); \ | 245 | sizeof *L1_SCRATCH_TASK_INFO); \ |
246 | (last) = resume (prev, next); \ | 246 | (last) = resume (prev, next); \ |
247 | } while (0) | 247 | } while (0) |
diff --git a/include/asm-m68k/thread_info.h b/include/asm-m68k/thread_info.h index c4d622a57dfb..d635a3752488 100644 --- a/include/asm-m68k/thread_info.h +++ b/include/asm-m68k/thread_info.h | |||
@@ -37,17 +37,17 @@ struct thread_info { | |||
37 | #define init_stack (init_thread_union.stack) | 37 | #define init_stack (init_thread_union.stack) |
38 | 38 | ||
39 | #define task_thread_info(tsk) (&(tsk)->thread.info) | 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 | #define current_thread_info() task_thread_info(current) | 41 | #define current_thread_info() task_thread_info(current) |
42 | 42 | ||
43 | #define __HAVE_THREAD_FUNCTIONS | 43 | #define __HAVE_THREAD_FUNCTIONS |
44 | 44 | ||
45 | #define setup_thread_stack(p, org) ({ \ | 45 | #define setup_thread_stack(p, org) ({ \ |
46 | *(struct task_struct **)(p)->thread_info = (p); \ | 46 | *(struct task_struct **)(p)->stack = (p); \ |
47 | task_thread_info(p)->task = (p); \ | 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 | /* entry.S relies on these definitions! | 52 | /* entry.S relies on these definitions! |
53 | * bits 0-7 are tested at every exception exit | 53 | * bits 0-7 are tested at every exception exit |
diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index b7b8021e8c43..ead9f9a56234 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h | |||
@@ -39,7 +39,7 @@ | |||
39 | [threadrsp] "i" (offsetof(struct task_struct, thread.rsp)), \ | 39 | [threadrsp] "i" (offsetof(struct task_struct, thread.rsp)), \ |
40 | [ti_flags] "i" (offsetof(struct thread_info, flags)),\ | 40 | [ti_flags] "i" (offsetof(struct thread_info, flags)),\ |
41 | [tif_fork] "i" (TIF_FORK), \ | 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 | [pda_pcurrent] "i" (offsetof(struct x8664_pda, pcurrent)) \ | 43 | [pda_pcurrent] "i" (offsetof(struct x8664_pda, pcurrent)) \ |
44 | : "memory", "cc" __EXTRA_CLOBBER) | 44 | : "memory", "cc" __EXTRA_CLOBBER) |
45 | 45 | ||
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 795102309bf1..45170b2fa253 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -95,7 +95,7 @@ extern struct group_info init_groups; | |||
95 | #define INIT_TASK(tsk) \ | 95 | #define INIT_TASK(tsk) \ |
96 | { \ | 96 | { \ |
97 | .state = 0, \ | 97 | .state = 0, \ |
98 | .thread_info = &init_thread_info, \ | 98 | .stack = &init_thread_info, \ |
99 | .usage = ATOMIC_INIT(2), \ | 99 | .usage = ATOMIC_INIT(2), \ |
100 | .flags = 0, \ | 100 | .flags = 0, \ |
101 | .lock_depth = -1, \ | 101 | .lock_depth = -1, \ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 28000b1658f9..17b72d88c4cb 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -817,7 +817,7 @@ struct prio_array; | |||
817 | 817 | ||
818 | struct task_struct { | 818 | struct task_struct { |
819 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ | 819 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ |
820 | struct thread_info *thread_info; | 820 | void *stack; |
821 | atomic_t usage; | 821 | atomic_t usage; |
822 | unsigned int flags; /* per process flags, defined below */ | 822 | unsigned int flags; /* per process flags, defined below */ |
823 | unsigned int ptrace; | 823 | unsigned int ptrace; |
@@ -1513,8 +1513,8 @@ static inline void unlock_task_sighand(struct task_struct *tsk, | |||
1513 | 1513 | ||
1514 | #ifndef __HAVE_THREAD_FUNCTIONS | 1514 | #ifndef __HAVE_THREAD_FUNCTIONS |
1515 | 1515 | ||
1516 | #define task_thread_info(task) (task)->thread_info | 1516 | #define task_thread_info(task) ((struct thread_info *)(task)->stack) |
1517 | #define task_stack_page(task) ((void*)((task)->thread_info)) | 1517 | #define task_stack_page(task) ((task)->stack) |
1518 | 1518 | ||
1519 | static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org) | 1519 | static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org) |
1520 | { | 1520 | { |
@@ -1524,7 +1524,7 @@ static inline void setup_thread_stack(struct task_struct *p, struct task_struct | |||
1524 | 1524 | ||
1525 | static inline unsigned long *end_of_stack(struct task_struct *p) | 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 | #endif | 1530 | #endif |
diff --git a/kernel/fork.c b/kernel/fork.c index a8dd75d4992b..5dd3979747f5 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -105,7 +105,7 @@ static struct kmem_cache *mm_cachep; | |||
105 | 105 | ||
106 | void free_task(struct task_struct *tsk) | 106 | void free_task(struct task_struct *tsk) |
107 | { | 107 | { |
108 | free_thread_info(tsk->thread_info); | 108 | free_thread_info(tsk->stack); |
109 | rt_mutex_debug_task_free(tsk); | 109 | rt_mutex_debug_task_free(tsk); |
110 | free_task_struct(tsk); | 110 | free_task_struct(tsk); |
111 | } | 111 | } |
@@ -175,7 +175,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
175 | } | 175 | } |
176 | 176 | ||
177 | *tsk = *orig; | 177 | *tsk = *orig; |
178 | tsk->thread_info = ti; | 178 | tsk->stack = ti; |
179 | setup_thread_stack(tsk, orig); | 179 | setup_thread_stack(tsk, orig); |
180 | 180 | ||
181 | #ifdef CONFIG_CC_STACKPROTECTOR | 181 | #ifdef CONFIG_CC_STACKPROTECTOR |