diff options
Diffstat (limited to 'arch/powerpc/kernel/smp.c')
| -rw-r--r-- | arch/powerpc/kernel/smp.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 36d67a8d7cbb..e28a139c29d0 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include <asm/cputable.h> | 44 | #include <asm/cputable.h> |
| 45 | #include <asm/system.h> | 45 | #include <asm/system.h> |
| 46 | #include <asm/mpic.h> | 46 | #include <asm/mpic.h> |
| 47 | #include <asm/systemcfg.h> | ||
| 47 | #ifdef CONFIG_PPC64 | 48 | #ifdef CONFIG_PPC64 |
| 48 | #include <asm/paca.h> | 49 | #include <asm/paca.h> |
| 49 | #endif | 50 | #endif |
| @@ -368,9 +369,11 @@ int generic_cpu_disable(void) | |||
| 368 | if (cpu == boot_cpuid) | 369 | if (cpu == boot_cpuid) |
| 369 | return -EBUSY; | 370 | return -EBUSY; |
| 370 | 371 | ||
| 371 | systemcfg->processorCount--; | ||
| 372 | cpu_clear(cpu, cpu_online_map); | 372 | cpu_clear(cpu, cpu_online_map); |
| 373 | #ifdef CONFIG_PPC64 | ||
| 374 | _systemcfg->processorCount--; | ||
| 373 | fixup_irqs(cpu_online_map); | 375 | fixup_irqs(cpu_online_map); |
| 376 | #endif | ||
| 374 | return 0; | 377 | return 0; |
| 375 | } | 378 | } |
| 376 | 379 | ||
| @@ -388,9 +391,11 @@ int generic_cpu_enable(unsigned int cpu) | |||
| 388 | while (!cpu_online(cpu)) | 391 | while (!cpu_online(cpu)) |
| 389 | cpu_relax(); | 392 | cpu_relax(); |
| 390 | 393 | ||
| 394 | #ifdef CONFIG_PPC64 | ||
| 391 | fixup_irqs(cpu_online_map); | 395 | fixup_irqs(cpu_online_map); |
| 392 | /* counter the irq disable in fixup_irqs */ | 396 | /* counter the irq disable in fixup_irqs */ |
| 393 | local_irq_enable(); | 397 | local_irq_enable(); |
| 398 | #endif | ||
| 394 | return 0; | 399 | return 0; |
| 395 | } | 400 | } |
| 396 | 401 | ||
| @@ -419,7 +424,9 @@ void generic_mach_cpu_die(void) | |||
| 419 | while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE) | 424 | while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE) |
| 420 | cpu_relax(); | 425 | cpu_relax(); |
| 421 | 426 | ||
| 427 | #ifdef CONFIG_PPC64 | ||
| 422 | flush_tlb_pending(); | 428 | flush_tlb_pending(); |
| 429 | #endif | ||
| 423 | cpu_set(cpu, cpu_online_map); | 430 | cpu_set(cpu, cpu_online_map); |
| 424 | local_irq_enable(); | 431 | local_irq_enable(); |
| 425 | } | 432 | } |
