[PATCH v5 1/9] irqchip/imx-irqsteer: Call chained_irq_exit() on the handler error path

Radu Rendec radu at rendec.net
Sat Aug 29 13:54:39 PDT 2026


On Fri, 2026-08-21 at 19:10 +0900, Zhipeng.wang_1 at oss.nxp.com wrote:
> From: Zhipeng Wang <zhipeng.wang_1 at nxp.com>
> 
> 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 <zhipeng.wang_1 at nxp.com>
> ---
>  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

Reviewed-by: Radu Rendec <radu at rendec.net>



More information about the linux-arm-kernel mailing list