[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>
This commit is contained in:
Keith Owens 2006-09-26 10:52:38 +02:00 committed by Andi Kleen
parent 575400d1b4
commit f574164491
3 changed files with 6 additions and 39 deletions

View File

@ -237,28 +237,17 @@ void __cpuinit cpu_init (void)
* set up and load the per-CPU TSS * set up and load the per-CPU TSS
*/ */
for (v = 0; v < N_EXCEPTION_STACKS; v++) { for (v = 0; v < N_EXCEPTION_STACKS; v++) {
if (cpu) {
static const unsigned int order[N_EXCEPTION_STACKS] = { static const unsigned int order[N_EXCEPTION_STACKS] = {
[0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER, [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
[DEBUG_STACK - 1] = DEBUG_STACK_ORDER [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
}; };
if (cpu) {
estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
if (!estacks) if (!estacks)
panic("Cannot allocate exception stack %ld %d\n", panic("Cannot allocate exception stack %ld %d\n",
v, cpu); v, cpu);
} }
switch (v + 1) { estacks += PAGE_SIZE << order[v];
#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;
}
orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks; orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks;
} }

View File

@ -162,26 +162,7 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack,
* 'stack' is in one of them: * 'stack' is in one of them:
*/ */
for (k = 0; k < N_EXCEPTION_STACKS; k++) { for (k = 0; k < N_EXCEPTION_STACKS; k++) {
unsigned long end; unsigned long end = per_cpu(orig_ist, cpu).ist[k];
/*
* 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;
}
/* /*
* Is 'stack' above this exception frame's end? * Is 'stack' above this exception frame's end?
* If yes then skip to the next frame. * If yes then skip to the next frame.

View File

@ -13,9 +13,6 @@ struct x8664_pda {
unsigned long data_offset; /* Per cpu data offset from linker address */ unsigned long data_offset; /* Per cpu data offset from linker address */
unsigned long kernelstack; /* top of kernel stack for current */ unsigned long kernelstack; /* top of kernel stack for current */
unsigned long oldrsp; /* user rsp for system call */ 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 irqcount; /* Irq nesting counter. Starts with -1 */
int cpunumber; /* Logical CPU number */ int cpunumber; /* Logical CPU number */
char *irqstackptr; /* top of irqstack */ char *irqstackptr; /* top of irqstack */