diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2009-03-26 10:23:56 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2009-03-26 10:24:08 -0400 |
commit | 3324e60aafa9aeb1009878d45079b67367a5e2b6 (patch) | |
tree | 7c7483b4d4c0996b30de899346b0070792e4f976 | |
parent | 431429ff788598a19c1a193b9fca3961b7f55916 (diff) |
[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>
-rw-r--r-- | arch/s390/kernel/smp.c | 2 |
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 @@ | |||
32 | #include <linux/delay.h> | 32 | #include <linux/delay.h> |
33 | #include <linux/cache.h> | 33 | #include <linux/cache.h> |
34 | #include <linux/interrupt.h> | 34 | #include <linux/interrupt.h> |
35 | #include <linux/irqflags.h> | ||
35 | #include <linux/cpu.h> | 36 | #include <linux/cpu.h> |
36 | #include <linux/timex.h> | 37 | #include <linux/timex.h> |
37 | #include <linux/bootmem.h> | 38 | #include <linux/bootmem.h> |
@@ -75,6 +76,7 @@ void smp_send_stop(void) | |||
75 | 76 | ||
76 | /* Disable all interrupts/machine checks */ | 77 | /* Disable all interrupts/machine checks */ |
77 | __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK); | 78 | __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK); |
79 | trace_hardirqs_off(); | ||
78 | 80 | ||
79 | /* stop all processors */ | 81 | /* stop all processors */ |
80 | for_each_online_cpu(cpu) { | 82 | for_each_online_cpu(cpu) { |