linux/drivers/irqchip
Stephan Gerhold 38a05c0b87 irqchip/qcom-mpm: Prevent crash when trying to handle non-wake GPIOs
On Qualcomm chipsets not all GPIOs are wakeup capable. Those GPIOs do not
have a corresponding MPM pin and should not be handled inside the MPM
driver. The IRQ domain hierarchy is always applied, so it's required to
explicitly disconnect the hierarchy for those. The pinctrl-msm driver marks
these with GPIO_NO_WAKE_IRQ. qcom-pdc has a check for this, but
irq-qcom-mpm is currently missing the check. This is causing crashes when
setting up interrupts for non-wake GPIOs:

 root@rb1:~# gpiomon -c gpiochip1 10
   irq: IRQ159: trimming hierarchy from :soc@0:interrupt-controller@f200000-1
   Unable to handle kernel paging request at virtual address ffff8000a1dc3820
   Hardware name: Qualcomm Technologies, Inc. Robotics RB1 (DT)
   pc : mpm_set_type+0x80/0xcc
   lr : mpm_set_type+0x5c/0xcc
   Call trace:
    mpm_set_type+0x80/0xcc (P)
    qcom_mpm_set_type+0x64/0x158
    irq_chip_set_type_parent+0x20/0x38
    msm_gpio_irq_set_type+0x50/0x530
    __irq_set_trigger+0x60/0x184
    __setup_irq+0x304/0x6bc
    request_threaded_irq+0xc8/0x19c
    edge_detector_setup+0x260/0x364
    linereq_create+0x420/0x5a8
    gpio_ioctl+0x2d4/0x6c0

Fix this by copying the check for GPIO_NO_WAKE_IRQ from qcom-pdc.c, so that
MPM is removed entirely from the hierarchy for non-wake GPIOs.

Fixes: a6199bb514 ("irqchip: Add Qualcomm MPM controller driver")
Reported-by: Alexey Klimov <alexey.klimov@linaro.org>
Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Alexey Klimov <alexey.klimov@linaro.org>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/all/20250502-irq-qcom-mpm-fix-no-wake-v1-1-8a1eafcd28d4@linaro.org
2025-05-02 21:07:02 +02:00
..
Kconfig irqchip/irq-bcm2712-mip: Enable driver when ARCH_BCM2835 is enabled 2025-04-16 14:39:25 +02:00
Makefile pci-v6.15-changes 2025-03-28 19:36:53 -07:00
alphascale_asm9260-icoll.h
exynos-combiner.c
irq-al-fic.c
irq-alpine-msi.c irqchip/alpine-msi: Fix off-by-one in allocation error path 2024-04-09 11:03:15 +02:00
irq-apple-aic.c arm64: sysreg: Add layout for ICH_HCR_EL2 2025-03-03 14:51:51 -08:00
irq-armada-370-xp.c irqdomain: Rename irq_get_default_host() to irq_get_default_domain() 2025-04-04 16:39:10 +02:00
irq-aspeed-i2c-ic.c
irq-aspeed-intc.c irqchip/aspeed-intc: Add AST27XX INTC support 2024-10-17 21:35:28 +02:00
irq-aspeed-scu-ic.c
irq-aspeed-vic.c
irq-ath79-cpu.c
irq-ath79-misc.c
irq-atmel-aic-common.c of: remove internal arguments from of_property_for_each_u32() 2024-07-25 06:53:47 -05:00
irq-atmel-aic-common.h
irq-atmel-aic.c irqchip: Remove asmlinkage for handlers registered with set_handle_irq() 2024-07-30 13:35:49 +02:00
irq-atmel-aic5.c irqchip/atmel-aic5: Add support for sam9x7 aic 2024-10-02 15:36:47 +02:00
irq-bcm2712-mip.c irqchip/irq-bcm2712-mip: Set EOI/ACK flags in msi_parent_ops 2025-04-07 16:27:48 +02:00
irq-bcm2835.c irqchip/bcm2835: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND 2024-07-15 15:13:55 +02:00
irq-bcm2836.c irqchip/bcm2836: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND 2024-12-03 12:15:42 +01:00
irq-bcm6345-l1.c irqchip/irq-bcm6345-l1: Avoid explicit cpumask allocation on stack 2024-04-24 21:23:49 +02:00
irq-bcm7038-l1.c irqchip/irq-bcm7038-l1: Prefer struct_size over open coded arithmetic 2024-02-13 10:53:15 +01:00
irq-bcm7120-l2.c
irq-brcmstb-l2.c irqchip/irq-brcmstb-l2: Replace brcmstb_l2_mask_and_ack() by generic function 2025-01-15 09:47:46 +01:00
irq-clps711x.c irqdomain: Rename irq_set_default_host() to irq_set_default_domain() 2025-04-04 16:39:10 +02:00
irq-crossbar.c
irq-csky-apb-intc.c
irq-csky-mpintc.c
irq-davinci-cp-intc.c irqchip/davinci-cp-intc: Remove public header 2025-03-04 15:46:59 +01:00
irq-digicolor.c
irq-dw-apb-ictl.c Revert "irqchip/dw-apb-ictl: Support building as module" 2024-06-25 21:30:48 +02:00
irq-ftintc010.c irqchip: Remove asmlinkage for handlers registered with set_handle_irq() 2024-07-30 13:35:49 +02:00
irq-gic-common.c irqchip/gic-v3: Make distributor priorities variables 2024-06-24 18:16:44 +01:00
irq-gic-common.h Switch ARM/ARM64 over to the modern per device MSI domains: 2024-07-22 14:02:19 -07:00
irq-gic-pm.c irqchip: Explicitly include correct DT includes 2023-08-21 17:49:11 +01:00
irq-gic-realview.c
irq-gic-v2m.c irqchip/gic-v2m: Prevent use after free of gicv2m_get_fwnode() 2025-04-26 10:17:24 +02:00
irq-gic-v3-its-fsl-mc-msi.c irqchip: Explicitly include correct DT includes 2023-08-21 17:49:11 +01:00
irq-gic-v3-its-msi-parent.c irqchip/irq-msi-lib: Optionally set default irq_eoi()/irq_ack() 2025-02-20 15:19:26 +01:00
irq-gic-v3-its.c IOMMU Updates for Linux v6.15 2025-03-26 20:10:09 -07:00
irq-gic-v3-mbi.c IOMMU Updates for Linux v6.15 2025-03-26 20:10:09 -07:00
irq-gic-v3.c irqchip/gic-v3: Fix rk3399 workaround when secure interrupts are enabled 2025-02-17 22:41:06 +01:00
irq-gic-v4.c irqchip/gic-v4.1: Replace bare number with ID_AA64PFR0_EL1_GIC_V4P1 2024-08-02 14:54:25 +02:00
irq-gic.c irqchip/gic: Correct declaration of *percpu_base pointer in union gic_base 2024-12-13 18:11:52 +01:00
irq-goldfish-pic.c
irq-hip04.c irqchip/gic-v3: Make distributor priorities variables 2024-06-24 18:16:44 +01:00
irq-i8259.c
irq-idt3243x.c
irq-imgpdc.c irqchip: Switch back to struct platform_driver::remove() 2024-11-26 20:09:06 +01:00
irq-imx-gpcv2.c irqdomain: Rename irq_set_default_host() to irq_set_default_domain() 2025-04-04 16:39:10 +02:00
irq-imx-intmux.c irqchip: Switch back to struct platform_driver::remove() 2024-11-26 20:09:06 +01:00
irq-imx-irqsteer.c irqchip/imx-irqsteer: Support up to 960 input interrupts 2025-03-07 09:42:46 +01:00
irq-imx-mu-msi.c irqchip/irq-msi-lib: Optionally set default irq_eoi()/irq_ack() 2025-02-20 15:19:26 +01:00
irq-ingenic-tcu.c
irq-ingenic.c
irq-ixp4xx.c irqchip: Remove asmlinkage for handlers registered with set_handle_irq() 2024-07-30 13:35:49 +02:00
irq-jcore-aic.c irqchip/jcore-aic, clocksource/drivers/jcore: Fix jcore-pit interrupt request 2025-02-17 23:27:49 +01:00
irq-keystone.c irqchip: keystone: Use syscon_regmap_lookup_by_phandle_args 2025-01-15 09:47:46 +01:00
irq-lan966x-oic.c irqchip: Add support for LAN966x OIC 2024-06-17 15:48:15 +02:00
irq-loongarch-avec.c irqchip/loongarch-avec: Add multi-nodes topology support 2025-01-15 10:19:20 +01:00
irq-loongarch-cpu.c Updates for the interrupt subsystem: 2024-09-17 07:09:17 +02:00
irq-loongson-eiointc.c irqchip/loongson-eiointc: Add virt extension support 2024-11-13 16:18:27 +08:00
irq-loongson-htpic.c
irq-loongson-htvec.c LoongArch: Move irqchip function prototypes to irq-loongson.h 2024-08-23 20:40:27 +02:00
irq-loongson-liointc.c LoongArch: Move irqchip function prototypes to irq-loongson.h 2024-08-23 20:40:27 +02:00
irq-loongson-pch-lpc.c LoongArch: Move irqchip function prototypes to irq-loongson.h 2024-08-23 20:40:27 +02:00
irq-loongson-pch-msi.c irqchip/irq-msi-lib: Optionally set default irq_eoi()/irq_ack() 2025-02-20 15:19:26 +01:00
irq-loongson-pch-pic.c LoongArch: Move irqchip function prototypes to irq-loongson.h 2024-08-23 20:40:27 +02:00
irq-loongson.h irqchip/loongarch-avec: Add AVEC irqchip support 2024-08-23 20:40:27 +02:00
irq-lpc32xx.c
irq-ls-extirq.c
irq-ls-scfg-msi.c genirq/msi: Refactor iommu_dma_compose_msi_msg() 2025-02-21 10:04:12 -04:00
irq-ls1x.c
irq-madera.c irqchip: Switch back to struct platform_driver::remove() 2024-11-26 20:09:06 +01:00
irq-mbigen.c Updates for the interrupt subsystem: 2024-09-17 07:09:17 +02:00
irq-mchp-eic.c
irq-meson-gpio.c irqchip: Add support for Amlogic A4 and A5 SoCs 2025-03-17 08:38:24 +01:00
irq-mips-cpu.c
irq-mips-gic.c irqchip/mips-gic: Prevent indirect access to clusters without CPU cores 2024-10-30 15:41:32 +01:00
irq-mmp.c
irq-mscc-ocelot.c irqchip/ocelot: Comment sticky register clearing code 2024-10-02 15:11:07 +02:00
irq-msi-lib.c irqchip/irq-msi-lib: Optionally set default irq_eoi()/irq_ack() 2025-02-20 15:19:26 +01:00
irq-msi-lib.h irqchip/irq-msi-lib: Prepare for DEVICE MSI to replace platform MSI 2024-07-18 20:31:20 +02:00
irq-mst-intc.c
irq-mtk-cirq.c
irq-mtk-sysirq.c
irq-mvebu-gicp.c irqchip/irq-msi-lib: Optionally set default irq_eoi()/irq_ack() 2025-02-20 15:19:26 +01:00
irq-mvebu-icu.c irqchip/irq-mvebu-icu: Fix access to msi_data from irq_domain::host_data 2025-01-27 11:07:03 +01:00
irq-mvebu-odmi.c irqchip/irq-msi-lib: Optionally set default irq_eoi()/irq_ack() 2025-02-20 15:19:26 +01:00
irq-mvebu-pic.c - Move the ->select callback to the correct ops structure in irq-mvebu-sei to 2024-12-01 12:37:58 -08:00
irq-mvebu-sei.c irqchip/irq-msi-lib: Optionally set default irq_eoi()/irq_ack() 2025-02-20 15:19:26 +01:00
irq-mxs.c irqchip/mxs: Declare icoll_handle_irq() as static 2024-04-23 00:28:14 +02:00
irq-nvic.c
irq-omap-intc.c irqchip: Remove asmlinkage for handlers registered with set_handle_irq() 2024-07-30 13:35:49 +02:00
irq-ompic.c
irq-or1k-pic.c
irq-orion.c
irq-owl-sirq.c
irq-partition-percpu.c genirq: Remove leading space from irq_chip::irq_print_chip() callbacks 2025-02-07 08:56:01 +01:00
irq-pic32-evic.c irqdomain: Rename irq_set_default_host() to irq_set_default_domain() 2025-04-04 16:39:10 +02:00
irq-pruss-intc.c irqchip: Switch back to struct platform_driver::remove() 2024-11-26 20:09:06 +01:00
irq-qcom-mpm.c irqchip/qcom-mpm: Prevent crash when trying to handle non-wake GPIOs 2025-05-02 21:07:02 +02:00
irq-rda-intc.c
irq-realtek-rtl.c
irq-renesas-intc-irqpin.c irqchip: Switch back to struct platform_driver::remove() 2024-11-26 20:09:06 +01:00
irq-renesas-irqc.c irqchip: Switch back to struct platform_driver::remove() 2024-11-26 20:09:06 +01:00
irq-renesas-rza1.c irqchip: Switch back to struct platform_driver::remove() 2024-11-26 20:09:06 +01:00
irq-renesas-rzg2l.c irqchip/renesas-rzg2l: Simplify checks in rzg2l_irqc_common_init() 2025-02-18 09:03:52 +01:00
irq-renesas-rzv2h.c irqchip/renesas-rzv2h: Prevent TINT spurious interrupt 2025-04-16 14:29:38 +02:00
irq-riscv-aplic-direct.c irqchip/riscv-aplic: Add support for hart indexes 2025-02-03 14:27:39 +01:00
irq-riscv-aplic-main.c irqchip/riscv-aplic: Prevent crash when MSI domain is missing 2024-11-16 00:45:37 +01:00
irq-riscv-aplic-main.h irqchip/riscv-aplic: Add ACPI support 2024-08-27 15:48:36 +02:00
irq-riscv-aplic-msi.c irqchip/riscv-aplic: Prevent crash when MSI domain is missing 2024-11-16 00:45:37 +01:00
irq-riscv-imsic-early.c Updates for interrupt chip drivers: 2025-03-25 09:54:36 -07:00
irq-riscv-imsic-platform.c irqchip/riscv-imsic: Special handling for non-atomic device MSI update 2025-02-20 15:19:27 +01:00
irq-riscv-imsic-state.c irqchip/riscv-imsic: Special handling for non-atomic device MSI update 2025-02-20 15:19:27 +01:00
irq-riscv-imsic-state.h irqchip/riscv-imsic: Avoid interrupt translation in interrupt handler 2025-02-20 15:19:27 +01:00
irq-riscv-intc.c irqchip/riscv-intc: Fix SMP=n boot with ACPI 2024-10-15 23:14:25 +02:00
irq-sa11x0.c irqchip: Remove asmlinkage for handlers registered with set_handle_irq() 2024-07-30 13:35:49 +02:00
irq-sg2042-msi.c irqchip/sg2042-msi: Add missing chip flags 2025-04-07 09:23:55 +02:00
irq-sifive-plic.c A set of updates for the interrupt subsystem: 2024-11-19 15:54:19 -08:00
irq-sl28cpld.c
irq-sni-exiu.c
irq-sp7021-intc.c
irq-st.c irqchip: Explicitly include correct DT includes 2023-08-21 17:49:11 +01:00
irq-starfive-jh8100-intc.c irqchip: Add StarFive external interrupt controller 2024-02-26 15:09:18 +01:00
irq-stm32-exti.c irqchip/stm32-exti: Split MCU and MPU code 2024-06-23 19:49:45 +02:00
irq-stm32mp-exti.c irqchip/stm32mp-exti: Use of_property_present() for non-boolean properties 2024-11-07 00:23:59 +01:00
irq-sun4i.c
irq-sun6i-r.c minmax: don't use max() in situations that want a C constant expression 2024-07-28 20:23:27 -07:00
irq-sunxi-nmi.c irqchip/sunxi-nmi: Support Allwinner A523 NMI controller 2025-03-07 08:39:03 +01:00
irq-tb10x.c irqchip: Remove redundant irq_chip::name initialization 2024-03-25 17:38:29 +01:00
irq-tegra.c
irq-thead-c900-aclint-sswi.c irqchip/riscv: Ensure ordering of memory writes and IPI writes 2025-01-27 11:07:03 +01:00
irq-ti-sci-inta.c irqchip/ti-sci-inta : Add module build support 2025-01-15 09:54:29 +01:00
irq-ti-sci-intr.c irqchip/ti-sci-intr: Add module build support 2025-01-15 09:54:29 +01:00
irq-ts4800.c irqchip/ts4800: Replace seq_printf() by seq_puts() 2025-01-15 09:59:42 +01:00
irq-uniphier-aidet.c irqchip: Explicitly include correct DT includes 2023-08-21 17:49:11 +01:00
irq-versatile-fpga.c Fix a potential abuse of seq_printf() format string in drivers 2024-11-22 15:31:35 +01:00
irq-vf610-mscm-ir.c
irq-vic.c irqchip/vic: Fix a kernel-doc warning 2024-02-21 18:31:08 +01:00
irq-vt8500.c
irq-wpcm450-aic.c
irq-xilinx-intc.c irqdomain: Rename irq_set_default_host() to irq_set_default_domain() 2025-04-04 16:39:10 +02:00
irq-xtensa-mx.c irqdomain: Rename irq_set_default_host() to irq_set_default_domain() 2025-04-04 16:39:10 +02:00
irq-xtensa-pic.c irqdomain: Rename irq_set_default_host() to irq_set_default_domain() 2025-04-04 16:39:10 +02:00
irq-zevio.c
irqchip.c irqchip: Plug a OF node reference leak in platform_irqchip_probe() 2025-01-15 10:38:43 +01:00
qcom-irq-combiner.c
qcom-pdc.c irqchip/qcom-pdc: Workaround hardware register bug on X1E80100 2025-02-21 09:47:06 +01:00
spear-shirq.c