[PATCH] Remove most of the special cases for the debug IST stack
authorKeith Owens <kaos@ocs.com.au>
Tue, 26 Sep 2006 08:52:38 +0000 (10:52 +0200)
committerAndi Kleen <andi@basil.nowhere.org>
Tue, 26 Sep 2006 08:52:38 +0000 (10:52 +0200)
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>
arch/x86_64/kernel/setup64.c
arch/x86_64/kernel/traps.c
include/asm-x86_64/pda.h

index 491361752c701e13e9daf8767463f3711f5a6455..9332d2361e0818ad7f9a2dec60c7d3f0cd67b4b3 100644 (file)
@@ -237,28 +237,17 @@ void __cpuinit cpu_init (void)
         * set up and load the per-CPU TSS
         */
        for (v = 0; v < N_EXCEPTION_STACKS; v++) {
+               static const unsigned int order[N_EXCEPTION_STACKS] = {
+                       [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
+                       [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
+               };
                if (cpu) {
-                       static const unsigned int order[N_EXCEPTION_STACKS] = {
-                               [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
-                               [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
-                       };
-
                        estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
                        if (!estacks)
                                panic("Cannot allocate exception stack %ld %d\n",
                                      v, cpu); 
                }
-               switch (v + 1) {
-#if DEBUG_STKSZ > EXCEPTION_STKSZ
-               case DEBUG_STACK:
-                       cpu_pda(cpu)->debugstack = (unsigned long)estacks;
-                       estacks += DEBUG_STKSZ;
-                       break;
-#endif
-               default:
-                       estacks += EXCEPTION_STKSZ;
-                       break;
-               }
+               estacks += PAGE_SIZE << order[v];
                orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks;
        }
 
index 38bc821e457bf217b8f12a8e5cdc115500a54c4f..fb8486eca1b672fd0a7bfc1b379dcd0cfcb4dff1 100644 (file)
@@ -162,26 +162,7 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack,
         * 'stack' is in one of them:
         */
        for (k = 0; k < N_EXCEPTION_STACKS; k++) {
-               unsigned long end;
-
-               /*
-                * set 'end' to the end of the exception stack.
-                */
-               switch (k + 1) {
-               /*
-                * TODO: this block is not needed i think, because
-                * setup64.c:cpu_init() sets up t->ist[DEBUG_STACK]
-                * properly too.
-                */
-#if DEBUG_STKSZ > EXCEPTION_STKSZ
-               case DEBUG_STACK:
-                       end = cpu_pda(cpu)->debugstack + DEBUG_STKSZ;
-                       break;
-#endif
-               default:
-                       end = per_cpu(orig_ist, cpu).ist[k];
-                       break;
-               }
+               unsigned long end = per_cpu(orig_ist, cpu).ist[k];
                /*
                 * Is 'stack' above this exception frame's end?
                 * If yes then skip to the next frame.
index 55e21da96e7a239534075b87c556f7ca50e52999..e2b23e337b94033039461da95f14869dd398064b 100644 (file)
@@ -13,9 +13,6 @@ struct x8664_pda {
        unsigned long data_offset;      /* Per cpu data offset from linker address */
        unsigned long kernelstack;  /* top of kernel stack for current */ 
        unsigned long oldrsp;       /* user rsp for system call */
-#if DEBUG_STKSZ > EXCEPTION_STKSZ
-       unsigned long debugstack;   /* #DB/#BP stack. */
-#endif
         int irqcount;              /* Irq nesting counter. Starts with -1 */   
        int cpunumber;              /* Logical CPU number */
        char *irqstackptr;      /* top of irqstack */