aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorNathan Lynch <ntl@pobox.com>2006-02-06 22:44:23 -0600
committerPaul Mackerras <paulus@samba.org>2006-02-07 21:51:54 +1100
commit7d4d61544a12333600bdb9b018a149868418692e (patch)
treeef645b27fcfbcad4ccf870cfb1832a14c1aadee6 /arch
parent[PATCH] powerpc: hypervisor check in pseries_kexec_cpu_down (diff)
downloadlinux-dev-7d4d61544a12333600bdb9b018a149868418692e.tar.xz
linux-dev-7d4d61544a12333600bdb9b018a149868418692e.zip
[PATCH] powerpc: avoid timer interrupt replay effect when onlining cpu
When a cpu is hotplug-onlined, if we don't set per_cpu(last_jiffy) to something sane, timer_interrupt will execute its while loop for every tick missed since the cpu was last online (or since the system was booted, if we're adding a new cpu). This can cause weird hangs, ssh sessions dropping, and we can even go xmon if we take a global IPI at the wrong time. Signed-off-by: Nathan Lynch <ntl@pobox.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kernel/smp.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index c8458c531b25..13595a64f013 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -540,6 +540,9 @@ int __devinit start_secondary(void *unused)
if (smp_ops->take_timebase)
smp_ops->take_timebase();
+ if (system_state > SYSTEM_BOOTING)
+ per_cpu(last_jiffy, cpu) = get_tb();
+
spin_lock(&call_lock);
cpu_set(cpu, cpu_online_map);
spin_unlock(&call_lock);