diff options
Diffstat (limited to 'arch/alpha/kernel/smp.c')
-rw-r--r-- | arch/alpha/kernel/smp.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 50d438db1f6b..35ddc02bfa4a 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
@@ -357,24 +357,10 @@ secondary_cpu_start(int cpuid, struct task_struct *idle) | |||
357 | * Bring one cpu online. | 357 | * Bring one cpu online. |
358 | */ | 358 | */ |
359 | static int __cpuinit | 359 | static int __cpuinit |
360 | smp_boot_one_cpu(int cpuid) | 360 | smp_boot_one_cpu(int cpuid, struct task_struct *idle) |
361 | { | 361 | { |
362 | struct task_struct *idle; | ||
363 | unsigned long timeout; | 362 | unsigned long timeout; |
364 | 363 | ||
365 | /* Cook up an idler for this guy. Note that the address we | ||
366 | give to kernel_thread is irrelevant -- it's going to start | ||
367 | where HWRPB.CPU_restart says to start. But this gets all | ||
368 | the other task-y sort of data structures set up like we | ||
369 | wish. We can't use kernel_thread since we must avoid | ||
370 | rescheduling the child. */ | ||
371 | idle = fork_idle(cpuid); | ||
372 | if (IS_ERR(idle)) | ||
373 | panic("failed fork for CPU %d", cpuid); | ||
374 | |||
375 | DBGS(("smp_boot_one_cpu: CPU %d state 0x%lx flags 0x%lx\n", | ||
376 | cpuid, idle->state, idle->flags)); | ||
377 | |||
378 | /* Signal the secondary to wait a moment. */ | 364 | /* Signal the secondary to wait a moment. */ |
379 | smp_secondary_alive = -1; | 365 | smp_secondary_alive = -1; |
380 | 366 | ||
@@ -487,9 +473,9 @@ smp_prepare_boot_cpu(void) | |||
487 | } | 473 | } |
488 | 474 | ||
489 | int __cpuinit | 475 | int __cpuinit |
490 | __cpu_up(unsigned int cpu) | 476 | __cpu_up(unsigned int cpu, struct task_struct *tidle) |
491 | { | 477 | { |
492 | smp_boot_one_cpu(cpu); | 478 | smp_boot_one_cpu(cpu, tidle); |
493 | 479 | ||
494 | return cpu_online(cpu) ? 0 : -ENOSYS; | 480 | return cpu_online(cpu) ? 0 : -ENOSYS; |
495 | } | 481 | } |