• Ming Lei's avatar
    ARM: 6952/1: fix lockdep warning of "unannotated irqs-off" · 9fc2552a
    Ming Lei authored
    This patch fixes the lockdep warning of "unannotated irqs-off"[1].
    
    After entering __irq_usr, arm core will disable interrupt automatically,
    but __irq_usr does not annotate the irq disable, so lockdep may complain
    the warning if it has chance to check this in irq handler.
    
    This patch adds trace_hardirqs_off in __irq_usr before entering irq_handler
    to handle the irq, also calls ret_to_user_from_irq to avoid calling
    disable_irq again.
    
    This is also a fix for irq off tracer.
    
    [1], lockdep warning log of "unannotated irqs-off"
    
    [   13.804687] ------------[ cut here ]------------
    [   13.809570] WARNING: at kernel/lockdep.c:3335 check_flags+0x78/0x1d0()
    [   13.816467] Modules linked in:
    [   13.819732] Backtrace:
    [   13.822357] [<c01cb42c>] (dump_backtrace+0x0/0x100) from [<c06abb14>] (dump_stack+0x20/0x24)
    [   13.831268]  r6:c07d8c2c r5:00000d07 r4:00000000 r3:00000000
    [   13.837280] [<c06abaf4>] (dump_stack+0x0/0x24) from [<c01ffc04>] (warn_slowpath_common+0x5c/0x74)
    [   13.846649] [<c01ffba8>] (warn_slowpath_common+0x0/0x74) from [<c01ffc48>] (warn_slowpath_null+0x2c/0x34)
    [   13.856781]  r8:00000000 r7:00000000 r6:c18b8194 r5:60000093 r4:ef182000
    [   13.863708] r3:00000009
    [   13.866485] [<c01ffc1c>] (warn_slowpath_null+0x0/0x34) from [<c0237d84>] (check_flags+0x78/0x1d0)
    [   13.875823] [<c0237d0c>] (check_flags+0x0/0x1d0) from [<c023afc8>] (lock_acquire+0x4c/0x150)
    [   13.884704] [<c023af7c>] (lock_acquire+0x0/0x150) from [<c06af638>] (_raw_spin_lock+0x4c/0x84)
    [   13.893798] [<c06af5ec>] (_raw_spin_lock+0x0/0x84) from [<c01f9a44>] (sched_ttwu_pending+0x58/0x8c)
    [   13.903320]  r6:ef92d040 r5:00000003 r4:c18b8180
    [   13.908233] [<c01f99ec>] (sched_ttwu_pending+0x0/0x8c) from [<c01f9a90>] (scheduler_ipi+0x18/0x1c)
    [   13.917663]  r6:ef183fb0 r5:00000003 r4:00000000 r3:00000001
    [   13.923645] [<c01f9a78>] (scheduler_ipi+0x0/0x1c) from [<c01bc458>] (do_IPI+0x9c/0xfc)
    [   13.932006] [<c01bc3bc>] (do_IPI+0x0/0xfc) from [<c06b0888>] (__irq_usr+0x48/0xe0)
    [   13.939971] Exception stack(0xef183fb0 to 0xef183ff8)
    [   13.945281] 3fa0:                                     ffffffc3 0001500c 00000001 0001500c
    [   13.953948] 3fc0: 00000050 400b45f0 400d9000 00000000 00000001 400d9600 6474e552 bea05b3c
    [   13.962585] 3fe0: 400d96c0 bea059c0 400b6574 400b65d8 20000010 ffffffff
    [   13.969573]  r6:00000403 r5:fa240100 r4:ffffffff r3:20000010
    [   13.975585] ---[ end trace efc4896ab0fb62cb ]---
    [   13.980468] possible reason: unannotated irqs-off.
    [   13.985534] irq event stamp: 1610
    [   13.989044] hardirqs last  enabled at (1610): [<c01c703c>] no_work_pending+0x8/0x2c
    [   13.997131] hardirqs last disabled at (1609): [<c01c7024>] ret_slow_syscall+0xc/0x1c
    [   14.005371] softirqs last  enabled at (0): [<c01fe5e4>] copy_process+0x2cc/0xa24
    [   14.013183] softirqs last disabled at (0): [<  (null)>]   (null)
    Signed-off-by: default avatarMing Lei <ming.lei@canonical.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    9fc2552a
entry-armv.S 28.9 KB