diff options
author | Keith Owens <kaos@ocs.com.au> | 2006-09-26 04:52:38 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2006-09-26 04:52:38 -0400 |
commit | f574164491d00d28b727d713685fb5edc9138200 (patch) | |
tree | 7ab1a5a2257e27824cf3762fcf276840259deceb | |
parent | 575400d1b483fbe9e03c68758059bfaf4e4768d1 (diff) |
[PATCH] Remove most of the special cases for the debug IST stack
Remove most of the special cases for the debug IST stack. This is a
follow on clean up patch, it requires the bug fix patch that adds
orig_ist.
Signed-off-by: Keith Owens <kaos@ocs.com.au>
Signed-off-by: Andi Kleen <ak@suse.de>
-rw-r--r-- | arch/x86_64/kernel/setup64.c | 21 | ||||
-rw-r--r-- | arch/x86_64/kernel/traps.c | 21 | ||||
-rw-r--r-- | include/asm-x86_64/pda.h | 3 |
3 files changed, 6 insertions, 39 deletions
diff --git a/arch/x86_64/kernel/setup64.c b/arch/x86_64/kernel/setup64.c index 491361752c70..9332d2361e08 100644 --- a/arch/x86_64/kernel/setup64.c +++ b/arch/x86_64/kernel/setup64.c | |||
@@ -237,28 +237,17 @@ void __cpuinit cpu_init (void) | |||
237 | * set up and load the per-CPU TSS | 237 | * set up and load the per-CPU TSS |
238 | */ | 238 | */ |
239 | for (v = 0; v < N_EXCEPTION_STACKS; v++) { | 239 | for (v = 0; v < N_EXCEPTION_STACKS; v++) { |
240 | static const unsigned int order[N_EXCEPTION_STACKS] = { | ||
241 | [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER, | ||
242 | [DEBUG_STACK - 1] = DEBUG_STACK_ORDER | ||
243 | }; | ||
240 | if (cpu) { | 244 | if (cpu) { |
241 | static const unsigned int order[N_EXCEPTION_STACKS] = { | ||
242 | [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER, | ||
243 | [DEBUG_STACK - 1] = DEBUG_STACK_ORDER | ||
244 | }; | ||
245 | |||
246 | estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); | 245 | estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); |
247 | if (!estacks) | 246 | if (!estacks) |
248 | panic("Cannot allocate exception stack %ld %d\n", | 247 | panic("Cannot allocate exception stack %ld %d\n", |
249 | v, cpu); | 248 | v, cpu); |
250 | } | 249 | } |
251 | switch (v + 1) { | 250 | estacks += PAGE_SIZE << order[v]; |
252 | #if DEBUG_STKSZ > EXCEPTION_STKSZ | ||
253 | case DEBUG_STACK: | ||
254 | cpu_pda(cpu)->debugstack = (unsigned long)estacks; | ||
255 | estacks += DEBUG_STKSZ; | ||
256 | break; | ||
257 | #endif | ||
258 | default: | ||
259 | estacks += EXCEPTION_STKSZ; | ||
260 | break; | ||
261 | } | ||
262 | orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks; | 251 | orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks; |
263 | } | 252 | } |
264 | 253 | ||
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c index 38bc821e457b..fb8486eca1b6 100644 --- a/arch/x86_64/kernel/traps.c +++ b/arch/x86_64/kernel/traps.c | |||
@@ -162,26 +162,7 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
162 | * 'stack' is in one of them: | 162 | * 'stack' is in one of them: |
163 | */ | 163 | */ |
164 | for (k = 0; k < N_EXCEPTION_STACKS; k++) { | 164 | for (k = 0; k < N_EXCEPTION_STACKS; k++) { |
165 | unsigned long end; | 165 | unsigned long end = per_cpu(orig_ist, cpu).ist[k]; |
166 | |||
167 | /* | ||
168 | * set 'end' to the end of the exception stack. | ||
169 | */ | ||
170 | switch (k + 1) { | ||
171 | /* | ||
172 | * TODO: this block is not needed i think, because | ||
173 | * setup64.c:cpu_init() sets up t->ist[DEBUG_STACK] | ||
174 | * properly too. | ||
175 | */ | ||
176 | #if DEBUG_STKSZ > EXCEPTION_STKSZ | ||
177 | case DEBUG_STACK: | ||
178 | end = cpu_pda(cpu)->debugstack + DEBUG_STKSZ; | ||
179 | break; | ||
180 | #endif | ||
181 | default: | ||
182 | end = per_cpu(orig_ist, cpu).ist[k]; | ||
183 | break; | ||
184 | } | ||
185 | /* | 166 | /* |
186 | * Is 'stack' above this exception frame's end? | 167 | * Is 'stack' above this exception frame's end? |
187 | * If yes then skip to the next frame. | 168 | * If yes then skip to the next frame. |
diff --git a/include/asm-x86_64/pda.h b/include/asm-x86_64/pda.h index 55e21da96e7a..e2b23e337b94 100644 --- a/include/asm-x86_64/pda.h +++ b/include/asm-x86_64/pda.h | |||
@@ -13,9 +13,6 @@ struct x8664_pda { | |||
13 | unsigned long data_offset; /* Per cpu data offset from linker address */ | 13 | unsigned long data_offset; /* Per cpu data offset from linker address */ |
14 | unsigned long kernelstack; /* top of kernel stack for current */ | 14 | unsigned long kernelstack; /* top of kernel stack for current */ |
15 | unsigned long oldrsp; /* user rsp for system call */ | 15 | unsigned long oldrsp; /* user rsp for system call */ |
16 | #if DEBUG_STKSZ > EXCEPTION_STKSZ | ||
17 | unsigned long debugstack; /* #DB/#BP stack. */ | ||
18 | #endif | ||
19 | int irqcount; /* Irq nesting counter. Starts with -1 */ | 16 | int irqcount; /* Irq nesting counter. Starts with -1 */ |
20 | int cpunumber; /* Logical CPU number */ | 17 | int cpunumber; /* Logical CPU number */ |
21 | char *irqstackptr; /* top of irqstack */ | 18 | char *irqstackptr; /* top of irqstack */ |