From 1df9796b35c9d4fdb9b0a724d05c41a8962ff393 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 2 Jun 2004 17:58:47 -0700 Subject: [PATCH] [PATCH] ppc64 gives up too quickly on hotplugged cpu From: Nathan Lynch 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. Signed-off-by: Nathan Lynch Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/ppc64/kernel/smp.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/arch/ppc64/kernel/smp.c b/arch/ppc64/kernel/smp.c index 051e31c07559c..5254a57e4e0d7 100644 --- a/arch/ppc64/kernel/smp.c +++ b/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); -- 2.53.0