[PATCH] ppc64 gives up too quickly on hotplugged cpu
From: Nathan Lynch
Date: Wed Jun 02 2004 - 18:00:44 EST
Hi-
On some systems it can take a hotplugged cpu much longer to come up than
it would at boot. If the cpu comes up after we've given up on it, it
tends to die in its first attempt to kmem_cache_alloc (uninitialized
percpu data, I imagine).
In my experimentation I haven't seen a processor take more than one
second to become available; the patch waits five seconds just to be safe.
Patch is against 2.6.7-rc2; please apply.
Signed-off-by: Nathan Lynch <nathanl@xxxxxxxxxxxxxx>
diff -Naurp -X ../dontdiff 2.6.7-rc2/arch/ppc64/kernel/smp.c 2.6.7-rc2.new/arch/ppc64/kernel/smp.c
--- 2.6.7-rc2/arch/ppc64/kernel/smp.c 2004-06-02 17:08:48.000000000 -0500
+++ 2.6.7-rc2.new/arch/ppc64/kernel/smp.c 2004-06-02 17:12:16.000000000 -0500
@@ -912,8 +912,20 @@ int __devinit __cpu_up(unsigned int cpu)
* use this value that I found through experimentation.
* -- Cort
*/
- for (c = 5000; c && !cpu_callin_map[cpu]; c--)
- udelay(100);
+ if (system_state == SYSTEM_BOOTING)
+ for (c = 5000; c && !cpu_callin_map[cpu]; c--)
+ udelay(100);
+#ifdef CONFIG_HOTPLUG_CPU
+ else
+ /*
+ * CPUs can take much longer to come up in the
+ * hotplug case. Wait five seconds.
+ */
+ for (c = 25; c && !cpu_callin_map[cpu]; c--) {
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ schedule_timeout(HZ/5);
+ }
+#endif
if (!cpu_callin_map[cpu]) {
printk("Processor %u is stuck.\n", cpu);