RE: [PATCH v5 15/15] irqchip/renesas-rzg2l: Add shared interrupt support
From: Biju Das
Date: Sat Mar 21 2026 - 08:14:08 EST
Hi Thomas,
> -----Original Message-----
> From: Biju Das
> Sent: 20 March 2026 16:07
> Subject: RE: [PATCH v5 15/15] irqchip/renesas-rzg2l: Add shared interrupt support
>
> Hi Thomas,
>
> Thanks for the feedback.
>
> > -----Original Message-----
> > From: Thomas Gleixner <tglx@xxxxxxxxxx>
> > Sent: 20 March 2026 09:01
> > Subject: Re: [PATCH v5 15/15] irqchip/renesas-rzg2l: Add shared
> > interrupt support
> >
> > On Wed, Mar 11 2026 at 19:24, Biju wrote:
> > > +static int rzg2l_irqc_irq_request_resources(struct irq_data *d) {
> > > + unsigned int hw_irq = irqd_to_hwirq(d);
> > > + struct rzg2l_irqc_priv *priv = irq_data_to_priv(d);
We cannot use the irq_chip::irq_{request,release}_resources callbacks to make
shared interrupts mutually exclusive between External interrupts
and GPIO interrupts.
It is possible to achieve mutual exclusion between External interrupts and
GPIO interrupts by using the irq_domain_ops::{alloc,free} callbacks.
I am seeing an IRQ storm if I use the irq_chip::irq_{request,release}_resources
callbacks.
IRQ8..IRQ15 → External interrupts
TINT24..TINT31 → GPIO interrupts
Selection of the shared interrupt line between external interrupt and
GPIO interrupt is based on the INTTSEL register.
Consider the case for the shared interrupt line where
IRQ15 (consumer: ethernet PHY driver) and
TINT31 (consumer: pinctrl driver) are both enabled in the device tree.
During driver probe, IRQ mappings are created for both domains.
In the IRQ storm case:
IRQ15 is probed first, but __setup_irq() has not been called yet.
TINT31 is probed second → __setup_irq() is called, and generating an interrupt causes
an IRQ storm because it is picking the EOI for IRQ15.
Therefore, I will switch to using irq_domain_ops::{alloc,free} for mutual exclusion between
External interrupts and GPIO interrupts.
Cheers,
Biju