diff options
Diffstat (limited to 'arch/powerpc/kernel/setup_64.c')
-rw-r--r-- | arch/powerpc/kernel/setup_64.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 65aced7b833a..87df51720641 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -454,6 +454,24 @@ static void __init irqstack_early_init(void) | |||
454 | #define irqstack_early_init() | 454 | #define irqstack_early_init() |
455 | #endif | 455 | #endif |
456 | 456 | ||
457 | #ifdef CONFIG_PPC_BOOK3E | ||
458 | static void __init exc_lvl_early_init(void) | ||
459 | { | ||
460 | unsigned int i; | ||
461 | |||
462 | for_each_possible_cpu(i) { | ||
463 | critirq_ctx[i] = (struct thread_info *) | ||
464 | __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE)); | ||
465 | dbgirq_ctx[i] = (struct thread_info *) | ||
466 | __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE)); | ||
467 | mcheckirq_ctx[i] = (struct thread_info *) | ||
468 | __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE)); | ||
469 | } | ||
470 | } | ||
471 | #else | ||
472 | #define exc_lvl_early_init() | ||
473 | #endif | ||
474 | |||
457 | /* | 475 | /* |
458 | * Stack space used when we detect a bad kernel stack pointer, and | 476 | * Stack space used when we detect a bad kernel stack pointer, and |
459 | * early in SMP boots before relocation is enabled. | 477 | * early in SMP boots before relocation is enabled. |
@@ -513,6 +531,7 @@ void __init setup_arch(char **cmdline_p) | |||
513 | init_mm.brk = klimit; | 531 | init_mm.brk = klimit; |
514 | 532 | ||
515 | irqstack_early_init(); | 533 | irqstack_early_init(); |
534 | exc_lvl_early_init(); | ||
516 | emergency_stack_init(); | 535 | emergency_stack_init(); |
517 | 536 | ||
518 | #ifdef CONFIG_PPC_STD_MMU_64 | 537 | #ifdef CONFIG_PPC_STD_MMU_64 |