diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-07-23 19:15:59 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-08-19 20:25:11 -0400 |
commit | 2d27cfd3286966c04d4192a9db5a6c7ea60eebf1 (patch) | |
tree | a9e3feb764da5a2be1a6ef9b3a0bf694e874a424 /arch/powerpc/kernel/setup_64.c | |
parent | 32a74949b7337726e76d69f51c48715431126c6c (diff) |
powerpc: Remaining 64-bit Book3E support
This contains all the bits that didn't fit in previous patches :-) This
includes the actual exception handlers assembly, the changes to the
kernel entry, other misc bits and wiring it all up in Kconfig.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
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 |