Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

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>

authored by

Yuriy Kolerov and committed by
Vineet Gupta
e51d5d02 2163266c

+4
+4
arch/arc/kernel/mcip.c
··· 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 <soc/arc/mcip.h> 15 16 #include <asm/irqflags-arcv2.h> ··· 222 221 static void idu_cascade_isr(struct irq_desc *desc) 223 222 { 224 223 struct irq_domain *idu_domain = irq_desc_get_handler_data(desc); 224 + struct irq_chip *core_chip = irq_desc_get_chip(desc); 225 225 irq_hw_number_t core_hwirq = irqd_to_hwirq(irq_desc_get_irq_data(desc)); 226 226 irq_hw_number_t idu_hwirq = core_hwirq - idu_first_hwirq; 227 227 228 + chained_irq_enter(core_chip, desc); 228 229 generic_handle_irq(irq_find_mapping(idu_domain, idu_hwirq)); 230 + chained_irq_exit(core_chip, desc); 229 231 } 230 232 231 233 static int idu_irq_map(struct irq_domain *d, unsigned int virq, irq_hw_number_t hwirq)