On Wed, Jun 7, 2023 at 10:20 AM Jiawen Wu <jiawenwu@xxxxxxxxxxxxxx> wrote: > > In case of gpio-regmap, IRQ chip is added by regmap-irq and associated with > GPIO chip by gpiochip_irqchip_add_domain(). The initialization flag was not > added in gpiochip_irqchip_add_domain(), causing gpiochip_to_irq() to return > -EPROBE_DEFER. > > Fixes: 5467801f1fcb ("gpio: Restrict usage of GPIO chip irq members before initialization") > Signed-off-by: Jiawen Wu <jiawenwu@xxxxxxxxxxxxxx> > --- > v1 -> v2: > - add compiler barrier > --- > drivers/gpio/gpiolib.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index a7220e04a93e..9ecf93cbd801 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -1792,6 +1792,14 @@ int gpiochip_irqchip_add_domain(struct gpio_chip *gc, > gc->to_irq = gpiochip_to_irq; > gc->irq.domain = domain; > > + /* > + * Using barrier() here to prevent compiler from reordering > + * gc->irq.initialized before adding irqdomain. > + */ > + barrier(); > + > + gc->irq.initialized = true; > + > return 0; > } > EXPORT_SYMBOL_GPL(gpiochip_irqchip_add_domain); > -- > 2.27.0 > Applied, thanks! Bart