[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250917100422.GH3893363@google.com>
Date: Wed, 17 Sep 2025 11:04:22 +0100
From: Lee Jones <lee@...nel.org>
To: Dmitry Torokhov <dmitry.torokhov@...il.com>
Cc: Alexander Kurz <akurz@...la.de>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Dzmitry Sankouski <dsankouski@...il.com>,
"Dr. David Alan Gilbert" <linux@...blig.org>,
Heiko Stuebner <heiko@...ech.de>,
Uwe Kleine-König <u.kleine-koenig@...libre.com>,
devicetree@...r.kernel.org, linux-input@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v4 4/8] mfd: mc13xxx: Use devm_mfd_add_devices and
devm_regmap_add_irq_chip
On Tue, 16 Sep 2025, Dmitry Torokhov wrote:
> Hi Alexander,
>
> On Sun, Sep 14, 2025 at 07:37:19PM +0000, Alexander Kurz wrote:
> > Use devm_mfd_add_devices() for adding MFD child devices and
> > devm_regmap_add_irq_chip() for IRQ chip registration.
> >
> > This reduces the amount of required cleanup.
> >
> > Signed-off-by: Alexander Kurz <akurz@...la.de>
> > ---
> > drivers/mfd/mc13xxx-core.c | 9 ++++-----
> > 1 file changed, 4 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
> > index 920797b806ce..091c9171b2b7 100644
> > --- a/drivers/mfd/mc13xxx-core.c
> > +++ b/drivers/mfd/mc13xxx-core.c
> > @@ -381,7 +381,7 @@ static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx,
> > if (!cell.name)
> > return -ENOMEM;
> >
> > - return mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0,
> > + return devm_mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0,
> > regmap_irq_get_domain(mc13xxx->irq_data));
> > }
> >
> > @@ -455,8 +455,9 @@ int mc13xxx_common_init(struct device *dev)
> > mc13xxx->irq_chip.irqs = mc13xxx->irqs;
> > mc13xxx->irq_chip.num_irqs = ARRAY_SIZE(mc13xxx->irqs);
> >
> > - ret = regmap_add_irq_chip(mc13xxx->regmap, mc13xxx->irq, IRQF_ONESHOT,
> > - 0, &mc13xxx->irq_chip, &mc13xxx->irq_data);
> > + ret = devm_regmap_add_irq_chip(dev, mc13xxx->regmap, mc13xxx->irq,
> > + IRQF_ONESHOT, 0, &mc13xxx->irq_chip,
> > + &mc13xxx->irq_data);
> > if (ret)
> > return ret;
> >
> > @@ -502,8 +503,6 @@ void mc13xxx_common_exit(struct device *dev)
> > {
> > struct mc13xxx *mc13xxx = dev_get_drvdata(dev);
> >
> > - mfd_remove_devices(dev);
> > - regmap_del_irq_chip(mc13xxx->irq, mc13xxx->irq_data);
> > mutex_destroy(&mc13xxx->lock);
>
> This causes the mutex be destroyed while the sub-devices are still
> present. The power button will try to call mc13xxx_lock() and
> mc13xxx_unlock() and of mutex debugging is enabled you'll get errors.
>
> I'd remove mutex_destroy() as well (and transitively get rid of
> mc13xxx_common_exit()) and then look into getting rid of mc13xxx_lock()
> and mc13xxx_unlock() because, as I mentioned in another email, they are
> IMO not needed.
>
> But this version of the patch is broken as far as I can tell.
Thanks for the input Dmitry.
I have removed the patch until this gets resolved.
--
Lee Jones [李琼斯]
Powered by blists - more mailing lists