[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:
parent
575400d1b4
commit
f574164491
|
@ -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++) {
|
||||||
|
static const unsigned int order[N_EXCEPTION_STACKS] = {
|
||||||
|
[0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
|
||||||
|
[DEBUG_STACK - 1] = DEBUG_STACK_ORDER
|
||||||
|
};
|
||||||
if (cpu) {
|
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]);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue