On Wed, Apr 24, 2024 at 10:47:11PM +0300, Andy Shevchenko wrote: > On Wed, Apr 24, 2024 at 08:51:23PM +0200, Marek Behún wrote: > > On Wed, 24 Apr 2024 21:33:44 +0300 > > Andy Shevchenko <andy@xxxxxxxxxx> wrote: > > > On Wed, Apr 24, 2024 at 07:38:05PM +0200, Marek Behún wrote: ... > > > > +static void omnia_irq_mapping_drop(void *res) > > > > +{ > > > > + irq_dispose_mapping((unsigned int)(unsigned long)res); > > > > +} > > > > > > Leftover? > > > > What do you mean? I dropped the devm-helpers.h changes, now I do > > devm_add_action_or_reset() manually, with this function as the action. > > But why? ... > > > > + irq_idx = omnia_int_to_gpio_idx[__bf_shf(INT_TRNG)]; > > > > + irq = gpiod_to_irq(gpiochip_get_desc(&mcu->gc, irq_idx)); > > > > + if (irq < 0) > > > > + return dev_err_probe(dev, irq, "Cannot get TRNG IRQ\n"); > > > > > + err = devm_add_action_or_reset(dev, omnia_irq_mapping_drop, > > > > + (void *)(unsigned long)irq); > > > > + if (err) > > > > + return err; > > > > > > Are you sure it's correct now? > > > > Yes, why wouldn't it? > > For what purpose? I don't see drivers doing that. Are you expecting that > the same IRQ mapping will be reused for something else? Can you elaborate > how? (I can imagine one theoretical / weird case how to achieve that, > but impractical.) > > Besides above, this is asymmetrical call to gpiod_to_irq(). If we really care > about this, it should be provided by GPIO library. FWIW, gpiochip_irqchip_remove() disposes mappings for internally allocated IRQ domains. So with your code it even might be a double-disposal. -- With Best Regards, Andy Shevchenko