• Geert Uytterhoeven's avatar
    irqchip/renesas-irqc: Use a separate lockdep class · b1370658
    Geert Uytterhoeven authored
    The renesas-irqc interrupt controller is cascaded to the GIC. Hence when
    propagating wake-up settings to its parent interrupt controller, the
    following lockdep warning is printed:
    
        =============================================
        [ INFO: possible recursive locking detected ]
        4.2.0-ape6evm-10725-g50fcd7643c034198 #280 Not tainted
        ---------------------------------------------
        s2ram/1072 is trying to acquire lock:
        (&irq_desc_lock_class){-.-...}, at: [<c008d3fc>] __irq_get_desc_lock+0x58/0x98
    
        but task is already holding lock:
        (&irq_desc_lock_class){-.-...}, at: [<c008d3fc>] __irq_get_desc_lock+0x58/0x98
    
        other info that might help us debug this:
        Possible unsafe locking scenario:
    
    	  CPU0
    	  ----
         lock(&irq_desc_lock_class);
         lock(&irq_desc_lock_class);
    
        *** DEADLOCK ***
    
        May be due to missing lock nesting notation
    
        6 locks held by s2ram/1072:
        #0:  (sb_writers#7){.+.+.+}, at: [<c012eb14>] __sb_start_write+0xa0/0xa8
        #1:  (&of->mutex){+.+.+.}, at: [<c019396c>] kernfs_fop_write+0x4c/0x1bc
        #2:  (s_active#24){.+.+.+}, at: [<c0193974>] kernfs_fop_write+0x54/0x1bc
        #3:  (pm_mutex){+.+.+.}, at: [<c008213c>] pm_suspend+0x10c/0x510
        #4:  (&dev->mutex){......}, at: [<c02af3c4>] __device_suspend+0xdc/0x2cc
        #5:  (&irq_desc_lock_class){-.-...}, at: [<c008d3fc>] __irq_get_desc_lock+0x58/0x98
    
        stack backtrace:
        CPU: 0 PID: 1072 Comm: s2ram Not tainted 4.2.0-ape6evm-10725-g50fcd7643c034198 #280
        Hardware name: Generic R8A73A4 (Flattened Device Tree)
        [<c0018078>] (unwind_backtrace) from [<c00144f0>] (show_stack+0x10/0x14)
        [<c00144f0>] (show_stack) from [<c0451f14>] (dump_stack+0x88/0x98)
        [<c0451f14>] (dump_stack) from [<c007b29c>] (__lock_acquire+0x15cc/0x20e4)
        [<c007b29c>] (__lock_acquire) from [<c007c6e0>] (lock_acquire+0xac/0x12c)
        [<c007c6e0>] (lock_acquire) from [<c0457c00>] (_raw_spin_lock_irqsave+0x40/0x54)
        [<c0457c00>] (_raw_spin_lock_irqsave) from [<c008d3fc>] (__irq_get_desc_lock+0x58/0x98)
        [<c008d3fc>] (__irq_get_desc_lock) from [<c008ebbc>] (irq_set_irq_wake+0x20/0xf8)
        [<c008ebbc>] (irq_set_irq_wake) from [<c0260770>] (irqc_irq_set_wake+0x20/0x4c)
        [<c0260770>] (irqc_irq_set_wake) from [<c008ec28>] (irq_set_irq_wake+0x8c/0xf8)
        [<c008ec28>] (irq_set_irq_wake) from [<c02cb8c0>] (gpio_keys_suspend+0x74/0xc0)
        [<c02cb8c0>] (gpio_keys_suspend) from [<c02ae8cc>] (dpm_run_callback+0x54/0x124)
    
    Avoid this false positive by using a separate lockdep class for IRQC
    interrupts.
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Cc: Grygorii Strashko <grygorii.strashko@ti.com>
    Cc: Magnus Damm <magnus.damm@gmail.com>
    Cc: Jason Cooper <jason@lakedaemon.net>
    Link: http://lkml.kernel.org/r/1441798974-25716-2-git-send-email-geert%2Brenesas@glider.beSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    b1370658
irq-renesas-irqc.c 8.44 KB