]> git.karo-electronics.de Git - karo-tx-linux.git/commit
kdump: fix crash_kexec()/smp_send_stop() race in panic
authorMichael Holzheu <holzheu@linux.vnet.ibm.com>
Wed, 16 Nov 2011 23:41:48 +0000 (10:41 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 23 Nov 2011 03:13:52 +0000 (14:13 +1100)
commitbc6c16323af3a371e3b5a8542a3f4953f57f4f4a
tree2cdc88380717084d1ce45c27fe80578da42b28e8
parent4b3cd313ace1f2055b8d39fa7da9ff030f75f05f
kdump: fix crash_kexec()/smp_send_stop() race in panic

When two CPUs call panic at the same time there is a possible race
condition that can stop kdump.  The first CPU calls crash_kexec() and the
second CPU calls smp_send_stop() in panic() before crash_kexec() finished
on the first CPU.  So the second CPU stops the first CPU and therefore
kdump fails:

1st CPU:
panic()->crash_kexec()->mutex_trylock(&kexec_mutex)-> do kdump

2nd CPU:
panic()->crash_kexec()->kexec_mutex already held by 1st CPU
       ->smp_send_stop()-> stop 1st CPU (stop kdump)

This patch fixes the problem by introducing a spinlock in panic that
allows only one CPU to process crash_kexec() and the subsequent panic
code.

Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: Vivek Goyal <vgoyal@redhat.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/panic.c