summaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/irq.c
diff options
context:
space:
mode:
authorFlorian Fainelli2015-07-24 00:52:21 +0200
committerThomas Gleixner2015-07-27 08:09:38 +0200
commit0aef3997e12a10d4dfb6e01133e2fe478b9aa5eb (patch)
tree9f590ae0085e4e9945b99952b1761ade0c5f4e3a /arch/alpha/kernel/irq.c
parentirqchip/bcm7120-l2: Perform suspend/resume even without installed child IRQs (diff)
downloadkernel-qcow2-linux-0aef3997e12a10d4dfb6e01133e2fe478b9aa5eb.tar.gz
kernel-qcow2-linux-0aef3997e12a10d4dfb6e01133e2fe478b9aa5eb.tar.xz
kernel-qcow2-linux-0aef3997e12a10d4dfb6e01133e2fe478b9aa5eb.zip
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: a5042de2688d ("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>
Diffstat (limited to 'arch/alpha/kernel/irq.c')
0 files changed, 0 insertions, 0 deletions