OSDN Git Service

sh: Setup boot CPU VBR early to enable early page faults.
authorPaul Mundt <lethal@linux-sh.org>
Wed, 17 Feb 2010 03:33:22 +0000 (12:33 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 17 Feb 2010 03:33:22 +0000 (12:33 +0900)
vmemmap and the vmsplit code amongst others need to be able to take page
faults much earlier than trap_init() time, so move this in to the early
CPU initialization. VBR setup for secondary CPUs is already handled
through start_secondary(), so we only need to do this for the boot CPU.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/cpu/init.c
arch/sh/kernel/traps_32.c

index 6311b0b..c736422 100644 (file)
@@ -24,6 +24,7 @@
 #include <asm/elf.h>
 #include <asm/io.h>
 #include <asm/smp.h>
+#include <asm/sh_bios.h>
 
 #ifdef CONFIG_SH_FPU
 #define cpu_has_fpu    1
@@ -342,9 +343,21 @@ asmlinkage void __init sh_cpu_init(void)
        speculative_execution_init();
        expmask_init();
 
-       /*
-        * Boot processor to setup the FP and extended state context info.
-        */
-       if (raw_smp_processor_id() == 0)
+       /* Do the rest of the boot processor setup */
+       if (raw_smp_processor_id() == 0) {
+               /* Save off the BIOS VBR, if there is one */
+               sh_bios_vbr_init();
+
+               /*
+                * Setup VBR for boot CPU. Secondary CPUs do this through
+                * start_secondary().
+                */
+               per_cpu_trap_init();
+
+               /*
+                * Boot processor to setup the FP and extended state
+                * context info.
+                */
                init_thread_xstate();
+       }
 }
index 9c090cb..c3d86fa 100644 (file)
@@ -30,7 +30,6 @@
 #include <asm/alignment.h>
 #include <asm/fpu.h>
 #include <asm/kprobes.h>
-#include <asm/sh_bios.h>
 
 #ifdef CONFIG_CPU_SH2
 # define TRAP_RESERVED_INST    4
@@ -848,12 +847,6 @@ void __init trap_init(void)
 #ifdef TRAP_UBC
        set_exception_table_vec(TRAP_UBC, breakpoint_trap_handler);
 #endif
-
-       /* Save off the BIOS VBR, if there is one */
-       sh_bios_vbr_init();
-
-       /* Setup VBR for boot cpu */
-       per_cpu_trap_init();
 }
 
 void show_stack(struct task_struct *tsk, unsigned long *sp)