powerpc/pmac/smp: Fix 32-bit PowerMac cpu_die

Use generic cpu_state, call idle_task_exit() properly, and
remove smp_core99_cpu_die() which isn't useful, the generic
function does the job just fine.
This commit is contained in:
Benjamin Herrenschmidt 2011-02-11 14:09:32 +11:00
parent 7a53a4fe70
commit fb49f864c3
2 changed files with 6 additions and 20 deletions

View File

@ -45,6 +45,7 @@ extern void fixup_irqs(const struct cpumask *map);
int generic_cpu_disable(void);
void generic_cpu_die(unsigned int cpu);
void generic_mach_cpu_die(void);
DECLARE_PER_CPU(int, cpu_state);
#endif
#ifdef CONFIG_PPC64

View File

@ -880,31 +880,17 @@ int smp_core99_cpu_disable(void)
return 0;
}
static int cpu_dead[NR_CPUS];
void pmac32_cpu_die(void)
{
local_irq_disable();
cpu_dead[smp_processor_id()] = 1;
idle_task_exit();
printk(KERN_DEBUG "CPU%d offline\n", smp_processor_id());
__get_cpu_var(cpu_state) = CPU_DEAD;
smp_wmb();
mb();
low_cpu_die();
}
void smp_core99_cpu_die(unsigned int cpu)
{
int timeout;
timeout = 1000;
while (!cpu_dead[cpu]) {
if (--timeout == 0) {
printk("CPU %u refused to die!\n", cpu);
break;
}
msleep(1);
}
cpu_dead[cpu] = 0;
}
#endif /* CONFIG_HOTPLUG_CPU && CONFIG_PP32 */
/* Core99 Macs (dual G4s and G5s) */
@ -918,12 +904,11 @@ struct smp_ops_t core99_smp_ops = {
#if defined(CONFIG_HOTPLUG_CPU)
# if defined(CONFIG_PPC32)
.cpu_disable = smp_core99_cpu_disable,
.cpu_die = smp_core99_cpu_die,
# endif
# if defined(CONFIG_PPC64)
.cpu_disable = generic_cpu_disable,
.cpu_die = generic_cpu_die,
# endif
.cpu_die = generic_cpu_die,
#endif
};