summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2009-03-26 15:23:56 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2009-03-26 15:24:08 +0100
commit3324e60aafa9aeb1009878d45079b67367a5e2b6 (patch)
tree7c7483b4d4c0996b30de899346b0070792e4f976 /arch
parent431429ff788598a19c1a193b9fca3961b7f55916 (diff)
downloadlinux-stable-3324e60aafa9aeb1009878d45079b67367a5e2b6.tar.gz
linux-stable-3324e60aafa9aeb1009878d45079b67367a5e2b6.tar.bz2
linux-stable-3324e60aafa9aeb1009878d45079b67367a5e2b6.zip
[S390] lockdep: trace hardirq off in smp_send_stop
With lockdep we got the following trace after a panic: Badness at /home/autobuild/BUILD/linux-2.6.28-20090204/kernel/lockdep.c:2878 [...] Call Trace: [<0000000000176334>] lock_acquire+0x54/0xbc [<000000000050b4fe>] __atomic_notifier_call_chain+0x6e/0xdc [<000000000050b59c>] atomic_notifier_call_chain+0x30/0x44 [<0000000000504274>] panic+0xd0/0x1e8 [...] INFO: lockdep is turned off. Last Breaking-Event-Address: [<0000000000170e62>] check_flags+0xae/0x15c possible reason: unannotated irqs-off. lockdep is right. We missed a trace_hardirq_off in our smp_send_stop function and smp_send_stop is called before the panic call chain. Reported-by: Mijo <Safradin mijo@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/s390/kernel/smp.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index e279d0fbbbe8..a8858634dd05 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -32,6 +32,7 @@
#include <linux/delay.h>
#include <linux/cache.h>
#include <linux/interrupt.h>
+#include <linux/irqflags.h>
#include <linux/cpu.h>
#include <linux/timex.h>
#include <linux/bootmem.h>
@@ -75,6 +76,7 @@ void smp_send_stop(void)
/* Disable all interrupts/machine checks */
__load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK);
+ trace_hardirqs_off();
/* stop all processors */
for_each_online_cpu(cpu) {