Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Christian Borntraeger and committed by
Martin Schwidefsky
3324e60a 431429ff

+2
+2
arch/s390/kernel/smp.c
··· 32 32 #include <linux/delay.h> 33 33 #include <linux/cache.h> 34 34 #include <linux/interrupt.h> 35 + #include <linux/irqflags.h> 35 36 #include <linux/cpu.h> 36 37 #include <linux/timex.h> 37 38 #include <linux/bootmem.h> ··· 76 75 77 76 /* Disable all interrupts/machine checks */ 78 77 __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK); 78 + trace_hardirqs_off(); 79 79 80 80 /* stop all processors */ 81 81 for_each_online_cpu(cpu) {