kernel_samsung_a53x/drivers/irqchip
Shenwei Wang 6909ec0bd6 irqchip/imx-irqsteer: Handle runtime power management correctly
[ Upstream commit 33b1c47d1fc0b5f06a393bb915db85baacba18ea ]

The power domain is automatically activated from clk_prepare(). However, on
certain platforms like i.MX8QM and i.MX8QXP, the power-on handling invokes
sleeping functions, which triggers the 'scheduling while atomic' bug in the
context switch path during device probing:

 BUG: scheduling while atomic: kworker/u13:1/48/0x00000002
 Call trace:
  __schedule_bug+0x54/0x6c
  __schedule+0x7f0/0xa94
  schedule+0x5c/0xc4
  schedule_preempt_disabled+0x24/0x40
  __mutex_lock.constprop.0+0x2c0/0x540
  __mutex_lock_slowpath+0x14/0x20
  mutex_lock+0x48/0x54
  clk_prepare_lock+0x44/0xa0
  clk_prepare+0x20/0x44
  imx_irqsteer_resume+0x28/0xe0
  pm_generic_runtime_resume+0x2c/0x44
  __genpd_runtime_resume+0x30/0x80
  genpd_runtime_resume+0xc8/0x2c0
  __rpm_callback+0x48/0x1d8
  rpm_callback+0x6c/0x78
  rpm_resume+0x490/0x6b4
  __pm_runtime_resume+0x50/0x94
  irq_chip_pm_get+0x2c/0xa0
  __irq_do_set_handler+0x178/0x24c
  irq_set_chained_handler_and_data+0x60/0xa4
  mxc_gpio_probe+0x160/0x4b0

Cure this by implementing the irq_bus_lock/sync_unlock() interrupt chip
callbacks and handle power management in them as they are invoked from
non-atomic context.

[ tglx: Rewrote change log, added Fixes tag ]

Fixes: 0136afa08967 ("irqchip: Add driver for imx-irqsteer controller")
Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240703163250.47887-1-shenwei.wang@nxp.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-23 23:20:19 +01:00
..
alphascale_asm9260-icoll.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
exynos-combiner.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-al-fic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-alpine-msi.c irqchip/alpine-msi: Fix off-by-one in allocation error path 2024-11-19 12:26:54 +01:00
irq-armada-370-xp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-aspeed-i2c-ic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-aspeed-scu-ic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-aspeed-vic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ath79-cpu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ath79-misc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ativic32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-atmel-aic-common.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-atmel-aic-common.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-atmel-aic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-atmel-aic5.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-bcm2835.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-bcm2836.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-bcm6345-l1.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-bcm7038-l1.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-bcm7120-l2.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-brcmstb-l2.c irqchip/irq-brcmstb-l2: Add write memory barrier before exit 2024-11-18 12:13:32 +01:00
irq-clps711x.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-crossbar.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-csky-apb-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-csky-mpintc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-davinci-aintc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-davinci-cp-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-digicolor.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-dw-apb-ictl.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-eznps.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ftintc010.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-common.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-common.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-pm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-realview.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v2m.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v3-its-fsl-mc-msi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v3-its-pci-msi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v3-its-platform-msi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v3-its.c irqchip/gic-v3-its: Prevent double free on error 2024-11-19 11:32:39 +01:00
irq-gic-v3-mbi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v3-vh.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v3.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic-v4.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-gic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-goldfish-pic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-hip04.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-i8259.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-imgpdc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-imx-gpcv2.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-imx-intmux.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-imx-irqsteer.c irqchip/imx-irqsteer: Handle runtime power management correctly 2024-11-23 23:20:19 +01:00
irq-ingenic-tcu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ingenic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ixp4xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-jcore-aic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-keystone.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-loongson-htpic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-loongson-htvec.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-loongson-liointc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-loongson-pch-msi.c irqchip/loongson-pch-msi: Fix off-by-one on allocation error path 2024-11-19 12:26:54 +01:00
irq-loongson-pch-pic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-lpc32xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ls-extirq.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ls-scfg-msi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ls1x.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-madera.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mbigen.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-meson-gpio.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mips-cpu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mips-gic.c irqchip/mips-gic: Don't touch vl_map if a local interrupt is not routable 2024-11-18 22:25:34 +01:00
irq-mmp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mscc-ocelot.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mst-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mtk-cirq.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mtk-sysirq.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mvebu-gicp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mvebu-icu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mvebu-odmi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mvebu-pic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mvebu-sei.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-mxs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-nvic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-omap-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ompic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-or1k-pic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-orion.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-owl-sirq.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-partition-percpu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-pic32-evic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-pruss-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-rda-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-renesas-h8s.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-renesas-h8300h.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-renesas-intc-irqpin.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-renesas-irqc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-renesas-rza1.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-riscv-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-sa11x0.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-sifive-plic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-sirfsoc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-sl28cpld.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-sni-exiu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-st.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-stm32-exti.c irqchip/stm32-exti: add missing DT IRQ flag translation 2024-11-18 10:58:46 +01:00
irq-sun4i.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-sunxi-nmi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-tango.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-tb10x.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-tegra.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ti-sci-inta.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ti-sci-intr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-ts4800.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-uniphier-aidet.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-versatile-fpga.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-vf610-mscm-ir.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-vic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-vt8500.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-xilinx-intc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-xtensa-mx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-xtensa-pic.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq-zevio.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irqchip.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig arm64: Disable GENERIC_IRQ_EFFECTIVE_AFF_MASK 2024-11-19 17:54:22 +01:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
qcom-irq-combiner.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
qcom-pdc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
spear-shirq.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00