|
@@ -248,23 +248,28 @@ void __devinit smp_prepare_boot_cpu(void)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Startup the CPU with this logical number
|
|
|
+ * 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
|
|
|
+ * physical, not logical.
|
|
|
*/
|
|
|
-static int __init do_boot_cpu(int cpu)
|
|
|
+int __devinit __cpu_up(unsigned int cpu)
|
|
|
{
|
|
|
struct task_struct *idle;
|
|
|
|
|
|
/*
|
|
|
+ * 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("failed fork for CPU %d\n", cpu);
|
|
|
+ panic(KERN_ERR "Fork failed for CPU %d", cpu);
|
|
|
|
|
|
prom_boot_secondary(cpu, idle);
|
|
|
|
|
|
- /* XXXKW timeout */
|
|
|
+ /*
|
|
|
+ * Trust is futile. We should really have timeouts ...
|
|
|
+ */
|
|
|
while (!cpu_isset(cpu, cpu_callin_map))
|
|
|
udelay(100);
|
|
|
|
|
@@ -273,23 +278,6 @@ static int __init do_boot_cpu(int cpu)
|
|
|
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
|
|
|
- * physical, not logical.
|
|
|
- */
|
|
|
-int __devinit __cpu_up(unsigned int cpu)
|
|
|
-{
|
|
|
- int ret;
|
|
|
-
|
|
|
- /* Processor goes to start_secondary(), sets online flag */
|
|
|
- ret = do_boot_cpu(cpu);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/* Not really SMP stuff ... */
|
|
|
int setup_profiling_timer(unsigned int multiplier)
|
|
|
{
|