Commit 301681d60003b172af1a70fdd833567e16f55d9a

Authored by Yuriy Kolerov
Committed by Greg Kroah-Hartman
1 parent f10e2065ce

ARCv2: IRQ: Call entry/exit functions for chained handlers in MCIP

[ Upstream commit e51d5d02f688c45b6f644f472f0c80fdfa73f0cb ]

It is necessary to call entry/exit functions for parent interrupt
controllers for proper masking/unmasking of interrupt lines.

Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 1 changed file with 4 additions and 0 deletions Side-by-side Diff

arch/arc/kernel/mcip.c
... ... @@ -10,6 +10,7 @@
10 10  
11 11 #include <linux/smp.h>
12 12 #include <linux/irq.h>
  13 +#include <linux/irqchip/chained_irq.h>
13 14 #include <linux/spinlock.h>
14 15 #include <asm/irqflags-arcv2.h>
15 16 #include <asm/mcip.h>
16 17  
17 18  
... ... @@ -221,10 +222,13 @@
221 222 static void idu_cascade_isr(struct irq_desc *desc)
222 223 {
223 224 struct irq_domain *idu_domain = irq_desc_get_handler_data(desc);
  225 + struct irq_chip *core_chip = irq_desc_get_chip(desc);
224 226 irq_hw_number_t core_hwirq = irqd_to_hwirq(irq_desc_get_irq_data(desc));
225 227 irq_hw_number_t idu_hwirq = core_hwirq - idu_first_hwirq;
226 228  
  229 + chained_irq_enter(core_chip, desc);
227 230 generic_handle_irq(irq_find_mapping(idu_domain, idu_hwirq));
  231 + chained_irq_exit(core_chip, desc);
228 232 }
229 233  
230 234 static int idu_irq_map(struct irq_domain *d, unsigned int virq, irq_hw_number_t hwirq)