From: Biju Das Date: Wed, 25 Mar 2026 19:24:21 +0000 (+0000) Subject: irqchip/renesas-rzg2l: Split EOI handler into separate IRQ and TINT functions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e5e0331dea48bbd6955af562aab4972a3950fa2;p=thirdparty%2Fkernel%2Flinux.git irqchip/renesas-rzg2l: Split EOI handler into separate IRQ and TINT functions The common rzg2l_irqc_eoi() handler uses a conditional to determine whether to clear an IRQ or an TINT interrupt. Split this into two dedicated handlers, rzg2l_irqc_irq_eoi() and rzg2l_irqc_tint_eoi(), each handling only their respective interrupt type without the need for range checks. While at it, simplify rzg2l_irqc_{irq,tint}_eoi() by replacing raw_spin_lock locking/unlocking with scoped_guard(). Signed-off-by: Biju Das Signed-off-by: Thomas Gleixner Link: https://patch.msgid.link/20260325192451.172562-7-biju.das.jz@bp.renesas.com --- diff --git a/drivers/irqchip/irq-renesas-rzg2l.c b/drivers/irqchip/irq-renesas-rzg2l.c index 1d1df49533681..664599acbeb65 100644 --- a/drivers/irqchip/irq-renesas-rzg2l.c +++ b/drivers/irqchip/irq-renesas-rzg2l.c @@ -130,17 +130,25 @@ static void rzg2l_clear_tint_int(struct rzg2l_irqc_priv *priv, unsigned int hwir } } -static void rzg2l_irqc_eoi(struct irq_data *d) +static void rzg2l_irqc_irq_eoi(struct irq_data *d) { struct rzg2l_irqc_priv *priv = irq_data_to_priv(d); unsigned int hw_irq = irqd_to_hwirq(d); - raw_spin_lock(&priv->lock); - if (hw_irq >= IRQC_IRQ_START && hw_irq <= IRQC_IRQ_COUNT) + scoped_guard(raw_spinlock, &priv->lock) rzg2l_clear_irq_int(priv, hw_irq); - else if (hw_irq >= IRQC_TINT_START && hw_irq < IRQC_NUM_IRQ) + + irq_chip_eoi_parent(d); +} + +static void rzg2l_irqc_tint_eoi(struct irq_data *d) +{ + struct rzg2l_irqc_priv *priv = irq_data_to_priv(d); + unsigned int hw_irq = irqd_to_hwirq(d); + + scoped_guard(raw_spinlock, &priv->lock) rzg2l_clear_tint_int(priv, hw_irq); - raw_spin_unlock(&priv->lock); + irq_chip_eoi_parent(d); } @@ -438,7 +446,7 @@ static struct syscore rzg2l_irqc_syscore = { static const struct irq_chip rzg2l_irqc_irq_chip = { .name = "rzg2l-irqc", - .irq_eoi = rzg2l_irqc_eoi, + .irq_eoi = rzg2l_irqc_irq_eoi, .irq_mask = irq_chip_mask_parent, .irq_unmask = irq_chip_unmask_parent, .irq_disable = rzg2l_irqc_irq_disable, @@ -455,7 +463,7 @@ static const struct irq_chip rzg2l_irqc_irq_chip = { static const struct irq_chip rzg2l_irqc_tint_chip = { .name = "rzg2l-irqc", - .irq_eoi = rzg2l_irqc_eoi, + .irq_eoi = rzg2l_irqc_tint_eoi, .irq_mask = irq_chip_mask_parent, .irq_unmask = irq_chip_unmask_parent, .irq_disable = rzg2l_irqc_irq_disable, @@ -472,7 +480,7 @@ static const struct irq_chip rzg2l_irqc_tint_chip = { static const struct irq_chip rzfive_irqc_irq_chip = { .name = "rzfive-irqc", - .irq_eoi = rzg2l_irqc_eoi, + .irq_eoi = rzg2l_irqc_irq_eoi, .irq_mask = rzfive_irqc_mask, .irq_unmask = rzfive_irqc_unmask, .irq_disable = rzfive_irqc_irq_disable, @@ -489,7 +497,7 @@ static const struct irq_chip rzfive_irqc_irq_chip = { static const struct irq_chip rzfive_irqc_tint_chip = { .name = "rzfive-irqc", - .irq_eoi = rzg2l_irqc_eoi, + .irq_eoi = rzg2l_irqc_tint_eoi, .irq_mask = rzfive_irqc_mask, .irq_unmask = rzfive_irqc_unmask, .irq_disable = rzfive_irqc_irq_disable,