android_kernel_motorola_sm6225/drivers/irqchip
qiuguorui1 93404fc8b6 irqchip/stm32-exti: Avoid losing interrupts due to clearing pending bits by mistake
commit e579076ac0a3bebb440fab101aef3c42c9f4c709 upstream.

In the current code, when the eoi callback of the exti clears the pending
bit of the current interrupt, it will first read the values of fpr and
rpr, then logically OR the corresponding bit of the interrupt number,
and finally write back to fpr and rpr.

We found through experiments that if two exti interrupts,
we call them int1/int2, arrive almost at the same time. in our scenario,
the time difference is 30 microseconds, assuming int1 is triggered first.

there will be an extreme scenario: both int's pending bit are set to 1,
the irq handle of int1 is executed first, and eoi handle is then executed,
at this moment, all pending bits are cleared, but the int 2 has not
finally been reported to the cpu yet, which eventually lost int2.

According to stm32's TRM description about rpr and fpr: Writing a 1 to this
bit will trigger a rising edge event on event x, Writing 0 has no
effect.

Therefore, when clearing the pending bit, we only need to clear the
pending bit of the irq.

Fixes: 927abfc446 ("irqchip/stm32: Add stm32mp1 support with hierarchy domain")
Signed-off-by: qiuguorui1 <qiuguorui1@huawei.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org # v4.18+
Link: https://lore.kernel.org/r/20200820031629.15582-1-qiuguorui1@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-09-03 11:24:29 +02:00
..
alphascale_asm9260-icoll.h
exynos-combiner.c irqchip/exynos-combiner: Fix usage of __raw IO 2016-06-23 18:26:42 +00: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 irqchip/aspeed-i2c-ic: Fix return value check in aspeed_i2c_ic_of_init() 2017-10-19 11:22:43 +01:00
irq-aspeed-vic.c irqchip/aspeed-vic: Add AST2500 compatible string 2017-06-22 14:13:39 +01:00
irq-ath79-cpu.c
irq-ath79-misc.c Revert "MIPS: perf: ath79: Fix perfcount IRQ assignment" 2019-06-11 12:20:53 +02:00
irq-ativic32.c irqchip: Andestech Internal Vector Interrupt Controller driver 2018-02-22 10:44:36 +08: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: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-atmel-aic5.c irqchip/atmel-aic: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-bcm2835.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-bcm2836.c irqchip/irq-bcm2836: Add support for DT interrupt polarity 2018-01-04 11:12:39 +00:00
irq-bcm6345-l1.c irqchip/bcm-6345-l1: Report that effective affinity is a single target 2017-08-18 10:54:41 +02:00
irq-bcm7038-l1.c irqchip/irq-bcm7038-l1: Enable parent IRQ if necessary 2020-01-04 19:12:52 +01:00
irq-bcm7120-l2.c irqchip/bcm: Remove hashed address printing 2018-02-16 14:22:16 +00:00
irq-brcmstb-l2.c irqchip/brcmstb-l2: Use _irqsave locking variants in non-interrupt code 2019-03-23 20:10:01 +01:00
irq-clps711x.c irqchip: clps711x: Changing the compatibility string to match with the smallest supported chip 2016-07-06 17:38:15 +02:00
irq-crossbar.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
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 irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09: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: Take lock when updating irq type 2018-03-29 11:47:50 +01:00
irq-gic-common.h irqchip/gic: Make quirks matching conditional on init return value 2017-10-19 11:22:38 +01:00
irq-gic-pm.c irqchip/gic-pm: Update driver to use of_pm_clk_add_clk 2016-09-12 19:46:28 +01: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 irqchip/gic-v2m: Fix SPI release on error path 2018-06-22 14:22:00 +02:00
irq-gic-v3-its-fsl-mc-msi.c irqchip/gic-v3-its: Move minimum LPI requirements to individual busses 2018-07-16 14:22:19 +01:00
irq-gic-v3-its-pci-msi.c irqchip/gic-v3-its: Reduce minimum LPI allocation to 1 for PCI devices 2018-07-27 10:01:24 +01:00
irq-gic-v3-its-platform-msi.c irqchip/gic-v3-its: Move minimum LPI requirements to individual busses 2018-07-16 14:22:19 +01:00
irq-gic-v3-its.c genirq/affinity: Make affinity setting if activated opt-in 2020-08-21 11:05:28 +02:00
irq-gic-v3-mbi.c irqchip/gic-v3-mbi: Fix uninitialized mbi_lock 2019-03-05 17:58:48 +01:00
irq-gic-v3.c irqchip/gic-v3: Only provision redistributors that are enabled in ACPI 2020-02-24 08:34:52 +01:00
irq-gic-v4.c irqchip/gic-v4: Clear IRQ_DISABLE_UNLAZY again if mapping fails 2017-11-10 09:50:36 +00:00
irq-gic.c irqchip/gic: Atomically update affinity 2020-07-09 09:37:12 +02:00
irq-goldfish-pic.c irqchip/irq-goldfish-pic: Add Goldfish PIC driver 2018-01-04 11:14:04 +00:00
irq-hip04.c irqchip/hip04: Report that effective affinity is a single target 2017-08-18 10:54:42 +02:00
irq-i8259.c irqchip/i8259: Set I/O port resource types correctly 2017-12-18 23:07:46 -06:00
irq-imgpdc.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
irq-imx-gpcv2.c irqchip/irq-imx-gpcv2: Forward irq type to parent 2019-08-25 10:47:53 +02:00
irq-ingenic.c irqchip: ingenic: Error out if IRQ domain creation failed 2020-01-04 19:12:52 +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/keystone: Fix "scheduling while atomic" on rt 2016-12-31 18:41:45 +00:00
irq-lpc32xx.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-ls-scfg-msi.c irqchip/ls-scfg-msi: Fix MSI affinity handling 2018-06-22 14:22:00 +02:00
irq-mbigen.c irqchip/mbigen: Free msi_desc on device teardown 2020-04-23 10:30:13 +02:00
irq-meson-gpio.c irqchip/meson-gpio: Add support for Meson-G12A SoC 2019-07-26 09:14:06 +02:00
irq-mips-cpu.c MIPS: Unify checks for sibling CPUs 2017-08-30 00:57:27 +02:00
irq-mips-gic.c irqchip/mips-gic: Use the correct local interrupt map registers 2019-07-03 13:14:46 +02:00
irq-mmp.c irqchip/mmp: Only touch the PJ4 IRQ & FIQ bits on enable/disable 2019-03-13 14:02:35 -07:00
irq-mscc-ocelot.c irqchip: Add a driver for the Microsemi Ocelot controller 2018-03-22 15:52:27 +00:00
irq-mtk-cirq.c irqchip: Add Mediatek mtk-cirq driver 2017-04-07 10:52:22 +01:00
irq-mtk-sysirq.c irqchip/irq-mtk-sysirq: Replace spinlock with raw_spinlock 2020-08-19 08:14:52 +02: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: Fix wrong private data retrieval 2019-11-24 08:19:40 +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-mxs.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-nvic.c
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 irqchip/or1k-pic: Fix interrupt acknowledgement 2017-06-30 15:33:11 +01:00
irq-orion.c
irq-partition-percpu.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
irq-pic32-evic.c
irq-renesas-h8s.c h8300: irqchip: fix warning 2018-08-22 19:14:19 +09: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: Use wakeup_path i.s.o. explicit clock handling 2018-03-14 11:11:15 +00:00
irq-renesas-irqc.c irqchip/renesas-irqc: Use wakeup_path i.s.o. explicit clock handling 2018-03-14 11:11:21 +00:00
irq-s3c24xx.c irqchip/s3c24xx: Remove unneeded comparison of unsigned long to 0 2018-08-13 16:20:17 +01:00
irq-sa11x0.c
irq-sifive-plic.c irqchip: add a SiFive PLIC driver 2018-08-13 08:31:32 -07:00
irq-sirfsoc.c irqchip/sirfsoc: Fix sparse warnings on __iomem 2016-06-13 00:48:31 +00:00
irq-sni-exiu.c irqchip/exiu: Fix return value check in exiu_init() 2017-11-14 11:27:22 +01:00
irq-st.c irqchip/st: Mark st_irq_syscfg_resume() __maybe_unused 2016-12-19 10:55:43 +01:00
irq-stm32-exti.c irqchip/stm32-exti: Avoid losing interrupts due to clearing pending bits by mistake 2020-09-03 11:24:29 +02:00
irq-sun4i.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01: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 irqchip/tango: Set irq handler and data in one go 2018-08-20 09:54:44 +01:00
irq-tb10x.c
irq-tegra.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-ts4800.c
irq-uniphier-aidet.c irqchip: Add UniPhier AIDET irqchip driver 2017-08-23 10:08:44 +01:00
irq-versatile-fpga.c irqchip/versatile-fpga: Apply clear-mask earlier 2020-04-17 10:48:46 +02:00
irq-vf610-mscm-ir.c
irq-vic.c irqchip/vic: Improve function-level documentation 2016-10-05 11:53:35 +02:00
irq-vt8500.c
irq-xilinx-intc.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-xtensa-mx.c xtensa: drop variant IRQ support 2018-08-20 12:28:05 -07:00
irq-xtensa-pic.c xtensa: drop variant IRQ support 2018-08-20 12:28:05 -07:00
irq-zevio.c
irqchip.c
Kconfig irqchip: Place CONFIG_SIFIVE_PLIC into the menu 2020-01-23 08:21:36 +01:00
Makefile irqchip: add a SiFive PLIC driver 2018-08-13 08:31:32 -07:00
qcom-irq-combiner.c irqchip/qcom: Fix check for spurious interrupts 2018-05-02 15:56:10 +02:00
qcom-pdc.c irqchip/pdc: Setup all edge interrupts as rising edge at GIC 2018-11-13 11:08:34 -08:00
spear-shirq.c