diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 1d3a4b501949..d1828ef5ffd6 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c @@ -247,32 +247,6 @@ void __devinit smp_prepare_boot_cpu(void) cpu_set(0, cpu_callin_map); } -/* - * Startup the CPU with this logical number - */ -static int __init do_boot_cpu(int cpu) -{ - struct task_struct *idle; - - /* - * The following code is purely to make sure - * Linux can schedule processes on this slave. - */ - idle = fork_idle(cpu); - if (IS_ERR(idle)) - panic("failed fork for CPU %d\n", cpu); - - prom_boot_secondary(cpu, idle); - - /* XXXKW timeout */ - while (!cpu_isset(cpu, cpu_callin_map)) - udelay(100); - - cpu_set(cpu, cpu_online_map); - - return 0; -} - /* * Called once for each "cpu_possible(cpu)". Needs to spin up the cpu * and keep control until "cpu_online(cpu)" is set. Note: cpu is @@ -280,12 +254,26 @@ static int __init do_boot_cpu(int cpu) */ int __devinit __cpu_up(unsigned int cpu) { - int ret; + struct task_struct *idle; - /* Processor goes to start_secondary(), sets online flag */ - ret = do_boot_cpu(cpu); - if (ret < 0) - return ret; + /* + * Processor goes to start_secondary(), sets online flag + * The following code is purely to make sure + * Linux can schedule processes on this slave. + */ + idle = fork_idle(cpu); + if (IS_ERR(idle)) + panic(KERN_ERR "Fork failed for CPU %d", cpu); + + prom_boot_secondary(cpu, idle); + + /* + * Trust is futile. We should really have timeouts ... + */ + while (!cpu_isset(cpu, cpu_callin_map)) + udelay(100); + + cpu_set(cpu, cpu_online_map); return 0; }