From: Rosen Penev Date: Sat, 18 Apr 2026 02:12:59 +0000 (-0700) Subject: irq-ath79-intc: add chained_irq_enter/exit X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c2e7b3eee03c62ae51e5fb5797ffbf312386def;p=thirdparty%2Fopenwrt.git irq-ath79-intc: add chained_irq_enter/exit Original review said: Missing chained_irq_enter/exit calls. Also rework slightly to reduce indentation. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/22981 Signed-off-by: Jonas Jelonek --- diff --git a/target/linux/ath79/files/drivers/irqchip/irq-ath79-intc.c b/target/linux/ath79/files/drivers/irqchip/irq-ath79-intc.c index 4945215d12c..fc938ad482a 100644 --- a/target/linux/ath79/files/drivers/irqchip/irq-ath79-intc.c +++ b/target/linux/ath79/files/drivers/irqchip/irq-ath79-intc.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -30,24 +31,30 @@ struct ath79_intc { static void ath79_intc_irq_handler(struct irq_desc *desc) { struct irq_domain *domain = irq_desc_get_handler_data(desc); + struct irq_chip *chip = irq_desc_get_chip(desc); struct ath79_intc *intc = domain->host_data; u32 pending; + int i; + + chained_irq_enter(chip, desc); pending = ath79_reset_rr(intc->int_status); pending &= intc->enable_mask; - if (pending) { - int i; - - for (i = 0; i < intc->num_irqs; i++) - if (pending & intc->irq_mask[i]) { - if (intc->irq_wb_chan[i] != 0xffffffff) - ath79_ddr_wb_flush(intc->irq_wb_chan[i]); - generic_handle_domain_irq(domain, i); - } - } else { + if (!pending) { spurious_interrupt(); + chained_irq_exit(chip, desc); + return; } + + for (i = 0; i < intc->num_irqs; i++) + if (pending & intc->irq_mask[i]) { + if (intc->irq_wb_chan[i] != 0xffffffff) + ath79_ddr_wb_flush(intc->irq_wb_chan[i]); + generic_handle_domain_irq(domain, i); + } + + chained_irq_exit(chip, desc); } static void ath79_intc_irq_enable(struct irq_data *d)