linux/arch/powerpc
Michael Neuling 1fc711f7ff powerpc/kexec: Fix race in kexec shutdown
In kexec_prepare_cpus, the primary CPU IPIs the secondary CPUs to
kexec_smp_down().  kexec_smp_down() calls kexec_smp_wait() which sets
the hw_cpu_id() to -1.  The primary does this while leaving IRQs on
which means the primary can take a timer interrupt which can lead to
the IPIing one of the secondary CPUs (say, for a scheduler re-balance)
but since the secondary CPU now has a hw_cpu_id = -1, we IPI CPU
-1... Kaboom!

We are hitting this case regularly on POWER7 machines.

There is also a second race, where the primary will tear down the MMU
mappings before knowing the secondaries have entered real mode.

Also, the secondaries are clearing out any pending IPIs before
guaranteeing that no more will be received.

This changes kexec_prepare_cpus() so that we turn off IRQs in the
primary CPU much earlier.  It adds a paca flag to say that the
secondaries have entered the kexec_smp_down() IPI and turned off IRQs,
rather than overloading hw_cpu_id with -1.  This new paca flag is
again used to in indicate when the secondaries has entered real mode.

It also ensures that all CPUs have their IRQs off before we clear out
any pending IPI requests (in kexec_cpu_down()) to ensure there are no
trailing IPIs left unacknowledged.

Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2010-05-21 17:31:11 +10:00
..
boot powerpc/83xx: Add MCU LEDs support for MPC837xRDB and MPC8315RDB boards 2010-05-17 10:55:32 -05:00
configs Merge commit 'origin/master' into next 2010-05-07 11:29:25 +10:00
include/asm powerpc/kexec: Fix race in kexec shutdown 2010-05-21 17:31:11 +10:00
kernel powerpc/kexec: Fix race in kexec shutdown 2010-05-21 17:31:11 +10:00
kvm KVM: fix the handling of dirty bitmaps to avoid overflows 2010-04-20 13:06:55 +03:00
lib powerpc: Fix string library functions 2010-05-21 17:31:08 +10:00
math-emu powerpc/math-emu: Fix efp dependence 2009-03-11 06:00:08 -05:00
mm powerpc/fsl-booke: Move loadcam_entry back to asm code to fix SMP ftrace 2010-05-17 10:56:20 -05:00
oprofile include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
platforms powerpc/kexec: Speedup kexec hash PTE tear down 2010-05-21 17:31:11 +10:00
sysdev powerpc: Add interrupt support to mpc8xxx_gpio 2010-05-17 10:48:28 -05:00
xmon powerpc: Mark some variables in the page fault path __read_mostly 2010-02-03 17:39:48 +11:00
Kconfig powerpc: Add kprobe-based event tracer 2010-04-07 18:11:43 +10:00
Kconfig.debug powerpc/cpumask: Add DEBUG_PER_CPU_MAPS option 2010-05-06 18:05:26 +10:00
Makefile powerpc: Check for unsupported relocs when using CONFIG_RELOCATABLE 2009-09-24 15:31:40 +10:00
relocs_check.pl powerpc: Check for unsupported relocs when using CONFIG_RELOCATABLE 2009-09-24 15:31:40 +10:00