Commit f574164491d00d28b727d713685fb5edc9138200
Committed by
Andi Kleen
1 parent
575400d1b4
Exists in
master
and in
4 other branches
[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>
Showing 3 changed files with 6 additions and 39 deletions Side-by-side Diff
arch/x86_64/kernel/setup64.c
| ... | ... | @@ -237,28 +237,17 @@ |
| 237 | 237 | * set up and load the per-CPU TSS |
| 238 | 238 | */ |
| 239 | 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 | 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 | 245 | estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); |
| 247 | 246 | if (!estacks) |
| 248 | 247 | panic("Cannot allocate exception stack %ld %d\n", |
| 249 | 248 | v, cpu); |
| 250 | 249 | } |
| 251 | - switch (v + 1) { | |
| 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 | - } | |
| 250 | + estacks += PAGE_SIZE << order[v]; | |
| 262 | 251 | orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks; |
| 263 | 252 | } |
| 264 | 253 |
arch/x86_64/kernel/traps.c
| ... | ... | @@ -162,26 +162,7 @@ |
| 162 | 162 | * 'stack' is in one of them: |
| 163 | 163 | */ |
| 164 | 164 | for (k = 0; k < N_EXCEPTION_STACKS; k++) { |
| 165 | - unsigned long end; | |
| 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 | - } | |
| 165 | + unsigned long end = per_cpu(orig_ist, cpu).ist[k]; | |
| 185 | 166 | /* |
| 186 | 167 | * Is 'stack' above this exception frame's end? |
| 187 | 168 | * If yes then skip to the next frame. |
include/asm-x86_64/pda.h
| ... | ... | @@ -13,9 +13,6 @@ |
| 13 | 13 | unsigned long data_offset; /* Per cpu data offset from linker address */ |
| 14 | 14 | unsigned long kernelstack; /* top of kernel stack for current */ |
| 15 | 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 | 16 | int irqcount; /* Irq nesting counter. Starts with -1 */ |
| 20 | 17 | int cpunumber; /* Logical CPU number */ |
| 21 | 18 | char *irqstackptr; /* top of irqstack */ |