Re: [PATCH v5 1/9] irqchip/imx-irqsteer: Call chained_irq_exit() on the handler error path
Frank Li <[email protected]>
| Newsgroups | dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <aohddKWL31fSXH2D@SMW015318> |
On Fri, Aug 21, 2026 at 07:10:31PM +0900, [email protected] wrote: > From: Zhipeng Wang <[email protected]> > > A chained handler must pair every chained_irq_enter() with a > chained_irq_exit() before returning, so that the parent interrupt's flow > control is completed (EOI for fasteoi parents, unmask for level-triggered > parents). Skipping it leaves the parent interrupt unacknowledged, blocking > further interrupts multiplexed through that line. > > When imx_irqsteer_get_hwirq_base() fails, the handler returned early > without calling chained_irq_exit(). Route the error path through the > existing chained_irq_exit() so the parent interrupt is always completed > before returning. > > Fixes: 28528fca4908 ("irqchip/imx-irqsteer: Add multi output interrupts support") > Signed-off-by: Zhipeng Wang <[email protected]> > --- Reviewed-by: Frank Li <[email protected]> > drivers/irqchip/irq-imx-irqsteer.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c > index 87b07f517be3..1b8d0c8eedb9 100644 > --- a/drivers/irqchip/irq-imx-irqsteer.c > +++ b/drivers/irqchip/irq-imx-irqsteer.c > @@ -154,7 +154,7 @@ static void imx_irqsteer_irq_handler(struct irq_desc *desc) > if (hwirq < 0) { > pr_warn("%s: unable to get hwirq base for irq %d\n", > __func__, irq); > - return; > + goto out; > } > > for (i = 0; i < 2; i++, hwirq += 32) { > @@ -172,6 +172,7 @@ static void imx_irqsteer_irq_handler(struct irq_desc *desc) > generic_handle_domain_irq(data->domain, pos + hwirq); > } > > +out: > chained_irq_exit(irq_desc_get_chip(desc), desc); > } > > > base-commit: bd5f485f3f026225b86573e559af0b7254ef4184 > -- > 2.34.1 > >