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 */ |
