Skip to contentSkip to conversation

ppc64 gives up too quickly on hotplugged cpu

PATCH In review Nathan Lynch 2 participants 2 messages Jun 2, 2004 – Jun 10, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ppc64 gives up too quickly on hotplugged cpu

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.

arch/ppc64/kernel/smp.c +14 -2
diff -Naurp -X ../dontdiff 2.6.7-rc2/arch/ppc64/kernel/smp.c 2.6.7-rc2.new/arch/ppc64/kernel/smp.c
@@ -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);
#1 lore raw

Hi!

Quoted 4 lines

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).

Should not CPU check if system given up on it, and go to infinite loop if it did to prevent data corruption?

Ouch and please inline patches.

Signature · 1 line
64 bytes from 195.113.31.123: icmp_seq=28 ttl=51 time=448769.1 ms