Commit f574164491d00d28b727d713685fb5edc9138200

Authored by Keith Owens
Committed by Andi Kleen
1 parent 575400d1b4

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