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.
parent 7a53a4fe
...@@ -45,6 +45,7 @@ extern void fixup_irqs(const struct cpumask *map); ...@@ -45,6 +45,7 @@ extern void fixup_irqs(const struct cpumask *map);
int generic_cpu_disable(void); int generic_cpu_disable(void);
void generic_cpu_die(unsigned int cpu); void generic_cpu_die(unsigned int cpu);
void generic_mach_cpu_die(void); void generic_mach_cpu_die(void);
DECLARE_PER_CPU(int, cpu_state);
#endif #endif
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
......
...@@ -880,31 +880,17 @@ int smp_core99_cpu_disable(void) ...@@ -880,31 +880,17 @@ int smp_core99_cpu_disable(void)
return 0; return 0;
} }
static int cpu_dead[NR_CPUS];
void pmac32_cpu_die(void) void pmac32_cpu_die(void)
{ {
local_irq_disable(); 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(); mb();
low_cpu_die(); 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 */ #endif /* CONFIG_HOTPLUG_CPU && CONFIG_PP32 */
/* Core99 Macs (dual G4s and G5s) */ /* Core99 Macs (dual G4s and G5s) */
...@@ -918,12 +904,11 @@ struct smp_ops_t core99_smp_ops = { ...@@ -918,12 +904,11 @@ struct smp_ops_t core99_smp_ops = {
#if defined(CONFIG_HOTPLUG_CPU) #if defined(CONFIG_HOTPLUG_CPU)
# if defined(CONFIG_PPC32) # if defined(CONFIG_PPC32)
.cpu_disable = smp_core99_cpu_disable, .cpu_disable = smp_core99_cpu_disable,
.cpu_die = smp_core99_cpu_die,
# endif # endif
# if defined(CONFIG_PPC64) # if defined(CONFIG_PPC64)
.cpu_disable = generic_cpu_disable, .cpu_disable = generic_cpu_disable,
.cpu_die = generic_cpu_die,
# endif # endif
.cpu_die = generic_cpu_die,
#endif #endif
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment