mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 08:44:21 +08:00
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:
parent
7a53a4fe70
commit
fb49f864c3
@ -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
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user