2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-15 16:53:54 +08:00
linux-next/drivers/irqchip
Geert Uytterhoeven b137065880 irqchip/renesas-irqc: Use a separate lockdep class
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: Geert 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.be
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2015-09-15 17:06:29 +02:00
..
exynos-combiner.c drivers/irqchip: Replace pr_warning by pr_warn 2015-07-22 18:37:42 +02:00
irq-armada-370-xp.c irqchip: Use irq_desc_get_xxx() to avoid redundant lookup of irq_desc 2015-07-11 23:14:27 +02:00
irq-atmel-aic5.c irqchip: Appropriate __init annotation for const data 2015-07-27 08:09:38 +02:00
irq-atmel-aic-common.c irqchip: atmel-aic-common: Prevent clobbering of priority when changing IRQ type 2015-01-07 12:41:45 +00:00
irq-atmel-aic-common.h irqchip: atmel-aic: Add irq fixup for RTT block 2014-11-09 04:36:38 +00:00
irq-atmel-aic.c irqchip: Appropriate __init annotation for const data 2015-07-27 08:09:38 +02:00
irq-bcm2835.c irqchip/bcm2835: Add support for being used as a second level controller 2015-08-20 22:38:41 +02:00
irq-bcm2836.c irqchip: Add bcm2836 interrupt controller for Raspberry Pi 2 2015-08-20 22:38:42 +02:00
irq-bcm7038-l1.c irqchip/bcm7038-l1: Consolidate chained IRQ handler install/remove 2015-07-11 23:14:25 +02:00
irq-bcm7120-l2.c irqchip/bcm7120-l2: Fix interrupt status for multiple parent IRQs 2015-07-27 08:09:38 +02:00
irq-brcmstb-l2.c irqchip/brcmstb-l2: Prepare brcmstb_l2_intc_irq_handle for irq argument removal 2015-07-16 22:53:22 +02:00
irq-clps711x.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-crossbar.c Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-09-01 14:33:35 -07:00
irq-digicolor.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-dw-apb-ictl.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-gic-common.c irqchip: gic: Simplify gic_configure_irq by using IRQCHIP_SET_TYPE_MASKED 2015-06-05 22:26:33 +02:00
irq-gic-common.h irqchip: gic: Allow interrupt level to be set for PPIs 2015-01-26 11:38:23 +01:00
irq-gic-v2m.c irqchip/GICv2m: Fix GICv2m build warning on 32 bits 2015-09-15 17:06:29 +02:00
irq-gic-v3-its-pci-msi.c irqchip/gicv3-its: Make the PCI/MSI code standalone 2015-07-30 00:14:38 +02:00
irq-gic-v3-its-platform-msi.c irqchip/gicv3-its: Add platform MSI support 2015-07-30 00:14:38 +02:00
irq-gic-v3-its.c irqchip/gic-v3-its: Add missing cache flushes 2015-09-15 17:06:29 +02:00
irq-gic-v3.c irqchip/GICv3: Don't deactivate interrupts forwarded to a guest 2015-08-27 17:13:49 +02:00
irq-gic.c irqchip/GIC: Add workaround for aliased GIC400 2015-09-15 17:06:29 +02:00
irq-hip04.c irqchip/gic: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND 2015-07-27 08:09:37 +02:00
irq-i8259.c irqchip/i8259: Prepare i8259_irq_dispatch for irq argument removal 2015-07-31 22:20:04 +02:00
irq-imgpdc.c irqchip/imgpdc: Prepare pdc_intc_perip_isr for irq argument removal 2015-07-16 22:53:22 +02:00
irq-imx-gpcv2.c irqchip/imx-gpcv2: IMX GPCv2 driver for wakeup sources 2015-08-24 21:49:34 +02:00
irq-ingenic.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-keystone.c irqchip/keystone: Prepare keystone_irq_handler for irq argument removal 2015-07-16 22:53:22 +02:00
irq-metag-ext.c irqchip/metag-ext: Use irq_set_chip_handler_name_locked() 2015-07-12 09:39:11 +02:00
irq-metag.c irqchip/metag: Consolidate chained IRQ handler install/remove 2015-07-11 23:14:26 +02:00
irq-mips-cpu.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-mips-gic.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-09-03 16:55:55 -07:00
irq-mmp.c irqchip/mmp: Prepare icu_mux_irq_demux for irq argument removal 2015-07-16 22:53:22 +02:00
irq-moxart.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-mtk-sysirq.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-mxs.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-nvic.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-omap-intc.c irqchip: omap-intc: Improve IRQ handler 2015-07-22 18:37:42 +02:00
irq-or1k-pic.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-orion.c irqchip: Use irq_desc_get_xxx() to avoid redundant lookup of irq_desc 2015-07-11 23:14:27 +02:00
irq-renesas-h8s.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-renesas-h8300h.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-renesas-intc-irqpin.c irqchip: Constify irq_domain_ops 2015-05-05 10:45:58 +02:00
irq-renesas-irqc.c irqchip/renesas-irqc: Use a separate lockdep class 2015-09-15 17:06:29 +02:00
irq-s3c24xx.c irqchip/s3c24xx: Prepare s3c_irq_demux for irq argument removal 2015-07-16 22:53:22 +02:00
irq-sa11x0.c ARM: kill off set_irq_flags usage 2015-07-28 13:58:13 +02:00
irq-sirfsoc.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-st.c irqchip: st: Supply new driver for STi based devices 2015-03-03 19:48:53 +00:00
irq-sun4i.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-sunxi-nmi.c irqchip: Use irq_desc_get_xxx() to avoid redundant lookup of irq_desc 2015-07-11 23:14:27 +02:00
irq-tb10x.c irqchip/tb10x: Prepare tb10x_irq_cascade for irq argument removal 2015-07-16 22:53:22 +02:00
irq-tegra.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-versatile-fpga.c irqchip/versatile-fpga: Prepare fpga_irq_handle for irq argument removal 2015-07-16 22:53:23 +02:00
irq-vf610-mscm-ir.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-vic.c irqchip/vic: Consolidate chained IRQ handler install/remove 2015-07-11 23:14:27 +02:00
irq-vt8500.c irqchip/vt8500: Use irq_set_handler_locked() 2015-07-12 09:37:47 +02:00
irq-xtensa-mx.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-xtensa-pic.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-zevio.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irqchip.c irqchip: Add GICv2 specific ACPI boot support 2015-03-26 15:13:07 +00:00
Kconfig irqchip/imx-gpcv2: IMX GPCv2 driver for wakeup sources 2015-08-24 21:49:34 +02:00
Makefile irqchip/imx-gpcv2: IMX GPCv2 driver for wakeup sources 2015-08-24 21:49:34 +02:00
spear-shirq.c Merge branch 'linus' into irq/core 2015-07-30 00:13:24 +02:00