aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/common_64.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/arch/x86/kernel/cpu/common_64.c b/arch/x86/kernel/cpu/common_64.c
index 8396fd7628a9..cc6efe86249d 100644
--- a/arch/x86/kernel/cpu/common_64.c
+++ b/arch/x86/kernel/cpu/common_64.c
@@ -606,19 +606,22 @@ void __cpuinit cpu_init(void)
606 /* 606 /*
607 * set up and load the per-CPU TSS 607 * set up and load the per-CPU TSS
608 */ 608 */
609 for (v = 0; v < N_EXCEPTION_STACKS; v++) { 609 if (!orig_ist->ist[0]) {
610 static const unsigned int order[N_EXCEPTION_STACKS] = { 610 static const unsigned int order[N_EXCEPTION_STACKS] = {
611 [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER, 611 [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
612 [DEBUG_STACK - 1] = DEBUG_STACK_ORDER 612 [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
613 }; 613 };
614 if (cpu) { 614 for (v = 0; v < N_EXCEPTION_STACKS; v++) {
615 estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); 615 if (cpu) {
616 if (!estacks) 616 estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
617 panic("Cannot allocate exception stack %ld %d\n", 617 if (!estacks)
618 v, cpu); 618 panic("Cannot allocate exception "
619 "stack %ld %d\n", v, cpu);
620 }
621 estacks += PAGE_SIZE << order[v];
622 orig_ist->ist[v] = t->x86_tss.ist[v] =
623 (unsigned long)estacks;
619 } 624 }
620 estacks += PAGE_SIZE << order[v];
621 orig_ist->ist[v] = t->x86_tss.ist[v] = (unsigned long)estacks;
622 } 625 }
623 626
624 t->x86_tss.io_bitmap_base = offsetof(struct tss_struct, io_bitmap); 627 t->x86_tss.io_bitmap_base = offsetof(struct tss_struct, io_bitmap);