kernel_optimize_test/drivers/irqchip
Florian Fainelli 0aef3997e1 irqchip/bcm7120-l2: Fix interrupt status for multiple parent IRQs
Our irq-bcm7120-l2 interrupt controller driver utilizes the same handler
function for the different parent interrupts it services: UPG_MAIN, UPG_BSC for
instance.

The problem is that function reads the IRQSTAT register which can combine
interrupt causes for different parent interrupts, such that we can end-up in
the following situation:

- CPU takes an interrupt
- bcm7120_l2_intc_irq_handle() reads IRQSTAT
- generic_handle_irq() is invoked
- there are still pending interrupts flagged in IRQSTAT from a different parent
- handle_bad_irq() is invoked for these since they come from a different irq_desc/irq

In order to fix this, make sure that we always mask IRQSTAT with the
appropriate bits that correspond go the parent interrupt source this is coming
from. To simplify things, associate an unique structure per parent interrupt
handler to avoid multiplying the number of lookups.

Fixes: a5042de268 ("irqchip: bcm7120-l2: Add Broadcom BCM7120-style Level 2 interrupt controller")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: cernekee@gmail.com
Cc: jason@lakedaemon.net
Cc: bcm-kernel-feedback-list@broadcom.com
Cc: gregory.0xf0@gmail.com
Cc: computersforpeace@gmail.com
Link: http://lkml.kernel.org/r/1437691941-3100-1-git-send-email-f.fainelli@gmail.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2015-07-27 08:09:38 +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-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-atmel-aic5.c irqchip: Appropriate __init annotation for const data 2015-07-27 08:09:38 +02:00
irq-bcm2835.c irqchip: Appropriate __init annotation for const data 2015-07-27 08:09:38 +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 irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02: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: gic-v2m: Add support for ARM GICv2m MSI(-X) doorbell 2014-11-26 15:55:18 +00:00
irq-gic-v3-its.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-gic-v3.c irqchip: Prepare for local stub header removal 2015-07-11 23:14:23 +02:00
irq-gic.c irqchip/gic: Remove redundant gic_set_irqchip_flags 2015-07-27 08:09:38 +02:00
irq-hip04.c irqchip/gic: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND 2015-07-27 08:09:37 +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-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 irqchip/mips-gic: Use irq_set_chip_handler_name_locked 2015-07-12 17:31:56 +02: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: Make use of irq_find_mapping() 2015-07-20 13:19:00 +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 Merge branch 'sa1100' into for-next 2015-06-12 21:18:13 +01: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
irqchip.h irqchip: Move IRQCHIP_DECLARE macro to include/linux/irqchip.h 2015-07-02 22:34:38 +02:00
Kconfig Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-06-27 12:44:34 -07:00
Makefile Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-06-27 12:44:34 -07:00
spear-shirq.c irqchip/spear-shirq: Prepare shirq_handler for irq argument removal 2015-07-16 22:53:23 +02:00