linux/drivers/irqchip
Valentin Schneider 17f644e949 irqchip/gic-v2, v3: Implement irq_chip->irq_retrigger()
While digging around IRQCHIP_EOI_IF_HANDLED and irq/resend.c, it has come
to my attention that the IRQ resend situation seems a bit precarious for
the GIC(s).

When marking an IRQ with IRQS_PENDING, handle_fasteoi_irq() will bail out
and issue an irq_eoi(). Should the IRQ in question be re-enabled,
check_irq_resend() will trigger a SW resend, which will go through the flow
handler again and issue *another* irq_eoi() on the *same* IRQ
activation. This is something the GIC spec clearly describes as a bad idea:
any EOI must match a previous ACK.

Implement irq_chip.irq_retrigger() for the GIC chips by setting the GIC
pending bit of the relevant IRQ. After being called by check_irq_resend(),
this will eventually trigger a *new* interrupt which we will handle as usual.

Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200730170321.31228-2-valentin.schneider@arm.com
2020-09-06 18:26:13 +01:00
..
alphascale_asm9260-icoll.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
exynos-combiner.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-al-fic.c irqchip/al-fic: Add support for irq retrigger 2019-09-09 18:11:47 +01:00
irq-alpine-msi.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
irq-armada-370-xp.c irqchip updates for 4.14 2017-08-31 20:12:51 +02:00
irq-aspeed-i2c-ic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-aspeed-scu-ic.c irqchip: Add Aspeed SCU interrupt controller 2020-01-20 19:10:04 +00:00
irq-aspeed-vic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
irq-ath79-cpu.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-ath79-misc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-ativic32.c irqchip/ativic32: Constify irq_domain_ops 2020-07-27 08:55:02 +01:00
irq-atmel-aic5.c irqchip/atmel-aic5: Add support for sam9x60 rtt fixup 2020-06-27 11:55:45 +01:00
irq-atmel-aic-common.c irqchip/atmel-aic: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-atmel-aic-common.h irqchip/atmel-aic: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-atmel-aic.c irqchip/atmel-aic: Fix irq_retrigger callback return value 2020-03-16 15:48:54 +00:00
irq-bcm2835.c irqchip/bcm2835: Quiesce IRQs left enabled by bootloader 2020-03-16 15:48:54 +00:00
irq-bcm2836.c irqchip: bcm283x: Switch to SPDX identifier 2018-12-13 09:35:36 +00:00
irq-bcm6345-l1.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-bcm7038-l1.c irqchip/irq-bcm7038-l1: Guard uses of cpu_logical_map 2020-07-27 08:55:03 +01:00
irq-bcm7120-l2.c irqchip/bcm7120-l2: Set controller as wake-up source 2020-07-17 13:41:42 +01:00
irq-brcmstb-l2.c irqchip/brcmstb-l2: Match UPG_AUX_AON_INTR2 compatible 2020-07-17 13:41:42 +01:00
irq-clps711x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-crossbar.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-csky-apb-intc.c irqchip/csky: fixup handle_irq_perbit break irq 2019-01-09 00:18:46 +08:00
irq-csky-mpintc.c Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-07-08 11:01:13 -07:00
irq-davinci-aintc.c irqchip: davinci-aintc: move the driver to drivers/irqchip 2019-02-19 20:02:17 +05:30
irq-davinci-cp-intc.c irqchip: davinci-cp-intc: move the driver to drivers/irqchip 2019-02-19 20:03:42 +05:30
irq-digicolor.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-dw-apb-ictl.c genirq: Fix various typos in comments 2018-12-18 14:22:28 +01:00
irq-eznps.c irqchip/eznps: Drop pointless static qualifier in nps400_of_init() 2016-10-19 14:24:36 +02:00
irq-ftintc010.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
irq-gic-common.c irqchip/gic: Skip DT quirks when evaluating IIDR-based quirks 2019-08-20 10:23:35 +01:00
irq-gic-common.h irqchip/gic: Prepare for more than 16 PPIs 2019-08-20 10:23:34 +01:00
irq-gic-pm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
irq-gic-realview.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
irq-gic-v2m.c PCI: Remove unused includes and superfluous struct declaration 2019-11-21 07:49:29 -06:00
irq-gic-v3-its-fsl-mc-msi.c bus: fsl-mc: Add ACPI support for fsl-mc 2020-07-28 15:51:32 +01:00
irq-gic-v3-its-pci-msi.c PCI: Remove unused includes and superfluous struct declaration 2019-11-21 07:49:29 -06:00
irq-gic-v3-its-platform-msi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
irq-gic-v3-its.c The usual boring updates from the interrupt subsystem: 2020-08-04 18:11:58 -07:00
irq-gic-v3-mbi.c irqchip/gic-v3-mbi: Don't map the MSI page in mbi_compose_m{b, s}i_msg() 2019-05-03 15:30:03 +01:00
irq-gic-v3.c irqchip/gic-v2, v3: Implement irq_chip->irq_retrigger() 2020-09-06 18:26:13 +01:00
irq-gic-v4.c irqchip/gic-v4.1: Add VSGI property setup 2020-03-24 12:15:51 +00:00
irq-gic.c irqchip/gic-v2, v3: Implement irq_chip->irq_retrigger() 2020-09-06 18:26:13 +01:00
irq-goldfish-pic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-hip04.c irqchip/gic: Prepare for more than 16 PPIs 2019-08-20 10:23:34 +01:00
irq-i8259.c irqchip: Replace setup_irq() by request_irq() 2020-03-08 14:25:46 +00:00
irq-imgpdc.c irqchip: Remove dev_err() usage after platform_get_irq() 2019-08-20 10:35:55 +01:00
irq-imx-gpcv2.c irqchip fixes for 5.3 2019-08-01 20:21:00 +02:00
irq-imx-intmux.c irqchip/imx-intmux: Fix irqdata regs save in imx_intmux_runtime_suspend() 2020-07-30 09:20:48 +01:00
irq-imx-irqsteer.c irqchip/imx-irqsteer: Use devm_platform_ioremap_resource() to simplify code 2019-04-29 15:45:00 +01:00
irq-ingenic-tcu.c irqchip/ingenic: Add support for TCU of X1000. 2020-03-22 11:52:52 +00:00
irq-ingenic.c irqchip: Replace setup_irq() by request_irq() 2020-03-08 14:25:46 +00:00
irq-ixp4xx.c irqchip/ixp4xx: Register the base PA instead of its VA in fwnode 2019-08-07 14:24:41 +01:00
irq-jcore-aic.c irqchip/jcore: Fix lost per-cpu interrupts 2016-10-14 14:26:55 +02:00
irq-keystone.c irqchip: Remove dev_err() usage after platform_get_irq() 2019-08-20 10:35:55 +01:00
irq-loongson-htpic.c irqchip/loongson-htpic: Remove redundant kfree operation 2020-07-17 13:41:42 +01:00
irq-loongson-htvec.c irqchip/loongson-htvec: Support 8 groups of HT vectors 2020-07-30 12:58:10 +01:00
irq-loongson-liointc.c irqchip/loongson-liointc: Fix misuse of gc->mask_cache 2020-07-30 12:57:51 +01:00
irq-loongson-pch-msi.c irqchip/loongson-pch-msi: Remove unneeded variable 2020-07-17 13:41:42 +01:00
irq-loongson-pch-pic.c irqchip/loongson-pch-pic: Fix the misused irq flow handler 2020-07-30 12:58:17 +01:00
irq-lpc32xx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 159 2019-05-30 11:26:37 -07:00
irq-ls1x.c irqchip/irq-ls1x: Missing error code in ls1x_intc_of_init() 2019-04-05 14:37:56 +02:00
irq-ls-extirq.c irqchip: Add support for Layerscape external interrupt lines 2019-11-10 18:47:49 +00:00
irq-ls-scfg-msi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-madera.c irqchip/madera: Drop GPIO includes 2019-01-17 17:04:24 +00:00
irq-mbigen.c irqchip/mbigen: Free msi_desc on device teardown 2020-04-17 08:59:27 +01:00
irq-meson-gpio.c irqchip/meson-gpio: Fix HARDIRQ-safe -> HARDIRQ-unsafe lock order 2020-04-17 08:59:29 +01:00
irq-mips-cpu.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-mips-gic.c irqchip/mips-gic: Make local symbols static 2020-07-27 08:55:02 +01:00
irq-mmp.c irqchip/mmp: Coexist with GIC root IRQ controller 2019-08-30 15:23:30 +01:00
irq-mscc-ocelot.c irqchhip: Convert to using %pOFn instead of device_node.name 2018-12-13 09:35:56 +00:00
irq-mtk-cirq.c irqchip/mtk-cirq: Convert to a platform driver 2020-07-27 08:55:04 +01:00
irq-mtk-sysirq.c irqchip/mtk-sysirq: Convert to a platform driver 2020-07-27 08:55:04 +01:00
irq-mvebu-gicp.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
irq-mvebu-icu.c irqchip/irq-mvebu-icu: Make legacy_bindings static 2020-04-17 08:59:29 +01:00
irq-mvebu-odmi.c
irq-mvebu-pic.c irqchip/mvebu-pic: New driver for Marvell Armada 7K/8K PIC 2016-08-22 22:58:27 +00:00
irq-mvebu-sei.c irqchip/irq-mvebu-sei: Make mvebu_sei_ap806_caps static 2019-03-21 16:43:00 +01:00
irq-mxs.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 1 2019-05-21 11:28:39 +02:00
irq-nvic.c irqchip/nvic: Use irq_domain_translate_onecell instead of custom func 2020-01-20 09:24:47 +00:00
irq-omap-intc.c irqchip/irq-omap-intc: Do not statically initialize variables 2017-10-16 21:05:14 +02:00
irq-ompic.c irqchip/ompic: fix return value check in ompic_of_init() 2018-01-04 11:13:22 +00:00
irq-or1k-pic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-orion.c irqchip: Convert to using %pOFn instead of device_node.name 2018-11-27 10:54:17 -06:00
irq-partition-percpu.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
irq-pic32-evic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-rda-intc.c irqchip/irq-rda-intc: Fix return value check in rda8810_intc_init() 2018-12-18 12:55:23 +00:00
irq-renesas-h8s.c genirq: Fix various typos in comments 2018-12-18 14:22:28 +01:00
irq-renesas-h8300h.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
irq-renesas-intc-irqpin.c irqchip/renesas-intc-irqpin: Restore devm_ioremap() alignment 2020-03-08 14:25:46 +00:00
irq-renesas-irqc.c irqchip/renesas-irqc: Use proper irq_chip name and parent 2019-06-11 12:22:42 +01:00
irq-renesas-rza1.c irqchip/renesas-rza1: Fix an use-after-free in rza1_irqc_probe() 2019-07-26 14:40:01 +01:00
irq-riscv-intc.c irqchip/riscv-intc: Fix a typo in a pr_warn() 2020-06-21 15:15:41 +01:00
irq-s3c24xx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
irq-sa11x0.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-sifive-plic.c irqchip: RISC-V per-HART local interrupt controller driver 2020-06-09 19:11:21 -07:00
irq-sirfsoc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 4 2019-05-21 11:28:40 +02:00
irq-sni-exiu.c Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-07-08 11:01:13 -07:00
irq-st.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-stm32-exti.c irqchip/stm32-exti: Map direct event to irq parent 2020-07-27 08:55:04 +01:00
irq-sun4i.c irqchip/sun4i: Add support for Allwinner ARMv5 F1C100s 2018-12-13 09:35:58 +00:00
irq-sunxi-nmi.c irqchip/sunxi-nmi: Support sun6i-a31-r-intc compatible 2017-06-22 14:08:17 +01:00
irq-tango.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-tb10x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
irq-tegra.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
irq-ti-sci-inta.c The usual boring updates from the interrupt subsystem: 2020-08-04 18:11:58 -07:00
irq-ti-sci-intr.c firmware: ti_sci: Replace HTTP links with HTTPS ones 2020-07-24 14:44:52 -07:00
irq-ts4800.c
irq-uniphier-aidet.c irqchip/uniphier-aidet: Use devm_platform_ioremap_resource() 2019-09-05 09:28:13 +01:00
irq-versatile-fpga.c irqchip/versatile-fpga: Apply clear-mask earlier 2020-03-22 11:52:16 +00:00
irq-vf610-mscm-ir.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
irq-vic.c irqchip/vic: Cut down the external API 2020-06-27 11:54:54 +01:00
irq-vt8500.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
irq-xilinx-intc.c Revert "irqchip/xilinx: Enable generic irq multi handler" 2020-04-01 09:12:24 +01:00
irq-xtensa-mx.c drivers/irqchip: xtensa-mx: fix mask and unmask 2019-01-26 02:02:15 -08:00
irq-xtensa-pic.c drivers/irqchip: xtensa: add warning to irq_retrigger 2019-01-26 02:02:14 -08:00
irq-zevio.c irqchip: Remove redundant semicolon after while 2019-11-10 18:47:44 +00:00
irqchip.c irqchip: Add IRQCHIP_PLATFORM_DRIVER_BEGIN/END and IRQCHIP_MATCH helper macros 2020-07-27 08:55:04 +01:00
Kconfig The usual boring updates from the interrupt subsystem: 2020-08-04 18:11:58 -07:00
Makefile irqchip: RISC-V per-HART local interrupt controller driver 2020-06-09 19:11:21 -07:00
qcom-irq-combiner.c irqchip/qcom-irq-combiner: Replace zero-length array with flexible-array member 2020-03-22 11:52:52 +00:00
qcom-pdc.c irqchip/qcom-pdc: Switch to using IRQCHIP_PLATFORM_DRIVER helper macros 2020-07-27 08:55:04 +01:00
spear-shirq.c remove lots of IS_ERR_VALUE abuses 2016-05-27 15:26:11 -07:00