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:
@@ -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)
|
|||||||
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 = {
|
|||||||
#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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user