diff options
Diffstat (limited to 'arch/parisc/kernel/smp.c')
-rw-r--r-- | arch/parisc/kernel/smp.c | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index 4dc7b7942b4c..a47828d31fe6 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c | |||
@@ -340,26 +340,11 @@ void __init smp_callin(void) | |||
340 | /* | 340 | /* |
341 | * Bring one cpu online. | 341 | * Bring one cpu online. |
342 | */ | 342 | */ |
343 | int __cpuinit smp_boot_one_cpu(int cpuid) | 343 | int __cpuinit smp_boot_one_cpu(int cpuid, struct task_struct *idle) |
344 | { | 344 | { |
345 | const struct cpuinfo_parisc *p = &per_cpu(cpu_data, cpuid); | 345 | const struct cpuinfo_parisc *p = &per_cpu(cpu_data, cpuid); |
346 | struct task_struct *idle; | ||
347 | long timeout; | 346 | long timeout; |
348 | 347 | ||
349 | /* | ||
350 | * Create an idle task for this CPU. Note the address wed* give | ||
351 | * to kernel_thread is irrelevant -- it's going to start | ||
352 | * where OS_BOOT_RENDEVZ vector in SAL says to start. But | ||
353 | * this gets all the other task-y sort of data structures set | ||
354 | * up like we wish. We need to pull the just created idle task | ||
355 | * off the run queue and stuff it into the init_tasks[] array. | ||
356 | * Sheesh . . . | ||
357 | */ | ||
358 | |||
359 | idle = fork_idle(cpuid); | ||
360 | if (IS_ERR(idle)) | ||
361 | panic("SMP: fork failed for CPU:%d", cpuid); | ||
362 | |||
363 | task_thread_info(idle)->cpu = cpuid; | 348 | task_thread_info(idle)->cpu = cpuid; |
364 | 349 | ||
365 | /* Let _start know what logical CPU we're booting | 350 | /* Let _start know what logical CPU we're booting |
@@ -403,10 +388,6 @@ int __cpuinit smp_boot_one_cpu(int cpuid) | |||
403 | udelay(100); | 388 | udelay(100); |
404 | barrier(); | 389 | barrier(); |
405 | } | 390 | } |
406 | |||
407 | put_task_struct(idle); | ||
408 | idle = NULL; | ||
409 | |||
410 | printk(KERN_CRIT "SMP: CPU:%d is stuck.\n", cpuid); | 391 | printk(KERN_CRIT "SMP: CPU:%d is stuck.\n", cpuid); |
411 | return -1; | 392 | return -1; |
412 | 393 | ||
@@ -455,10 +436,10 @@ void smp_cpus_done(unsigned int cpu_max) | |||
455 | } | 436 | } |
456 | 437 | ||
457 | 438 | ||
458 | int __cpuinit __cpu_up(unsigned int cpu) | 439 | int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle) |
459 | { | 440 | { |
460 | if (cpu != 0 && cpu < parisc_max_cpus) | 441 | if (cpu != 0 && cpu < parisc_max_cpus) |
461 | smp_boot_one_cpu(cpu); | 442 | smp_boot_one_cpu(cpu, tidle); |
462 | 443 | ||
463 | return cpu_online(cpu) ? 0 : -ENOSYS; | 444 | return cpu_online(cpu) ? 0 : -ENOSYS; |
464 | } | 445 | } |