|
@@ -606,19 +606,22 @@ 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++) {
|
|
|
|
|
|
+ if (!orig_ist->ist[0]) {
|
|
static const unsigned int order[N_EXCEPTION_STACKS] = {
|
|
static const unsigned int order[N_EXCEPTION_STACKS] = {
|
|
- [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
|
|
|
|
- [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
|
|
|
|
|
|
+ [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
|
|
|
|
+ [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
|
|
};
|
|
};
|
|
- if (cpu) {
|
|
|
|
- estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
|
|
|
|
- if (!estacks)
|
|
|
|
- panic("Cannot allocate exception stack %ld %d\n",
|
|
|
|
- v, cpu);
|
|
|
|
|
|
+ for (v = 0; v < N_EXCEPTION_STACKS; v++) {
|
|
|
|
+ if (cpu) {
|
|
|
|
+ estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
|
|
|
|
+ if (!estacks)
|
|
|
|
+ panic("Cannot allocate exception "
|
|
|
|
+ "stack %ld %d\n", v, cpu);
|
|
|
|
+ }
|
|
|
|
+ estacks += PAGE_SIZE << order[v];
|
|
|
|
+ orig_ist->ist[v] = t->x86_tss.ist[v] =
|
|
|
|
+ (unsigned long)estacks;
|
|
}
|
|
}
|
|
- estacks += PAGE_SIZE << order[v];
|
|
|
|
- orig_ist->ist[v] = t->x86_tss.ist[v] = (unsigned long)estacks;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
t->x86_tss.io_bitmap_base = offsetof(struct tss_struct, io_bitmap);
|
|
t->x86_tss.io_bitmap_base = offsetof(struct tss_struct, io_bitmap);
|