From: Jonathan Cameron <jic23@kernel.org>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: "Joshua Crofts" <joshua.crofts1@gmail.com>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
"David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Sean Nyekjaer" <sean@geanix.com>
Subject: Re: [PATCH v0 10/14] iio: magnetometer: ak8975: switch to using managed resources
Date: Wed, 29 Apr 2026 16:10:07 +0100 [thread overview]
Message-ID: <20260429161007.59d9436a@jic23-huawei> (raw)
In-Reply-To: <afIW3HuMVrmh6Jhm@ashevche-desk.local>
On Wed, 29 Apr 2026 17:34:04 +0300
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Wed, Apr 29, 2026 at 03:48:52PM +0200, Joshua Crofts wrote:
> > On Tue, 28 Apr 2026 at 18:33, Jonathan Cameron <jic23@kernel.org> wrote:
> > > On Mon, 27 Apr 2026 22:09:55 +0200
> > > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>
> This is combined reply to both of you.
>
> ...
>
> > > One day I'll have time to write up some notes on patterns that work
> > > for runtime pm + devm. I don't think think this one does - note original
> > > code didn't work either as would underflow on regulators in some paths
> > > and hence print warnings.
>
> > > > +static void devm_ak8975_power_off(void *data)
> > > > +{
> > > > + ak8975_set_mode(data, POWER_DOWN);
> > >
> > > Add a comment somewhere appropriate on what we are undoing with this.
> > >
> > > It's a 'might not be runtime suspended' at time of remove I think
> > > rather than the mode being set at that point in probe.
> > >
> > > If it is suspended, we shouldn't call the regulator disables
> > > in power_off. So maybe gate this whole thing on
> > > whether runtime suspended. If you do that be careful with what
> > > state we are in until runtime PM is enabled. Maybe you already have that
> > > covered elsewhere.
> >
> > Okay, I'll add a pm_runtime_status_suspended() check here.
>
> Also check for the DPM_FLAG_SMART_SUSPEND and others first. They might
> be helpful.
>
> > > > + ak8975_power_off(data);
> > > > +}
>
> Hmm... I thought that we have the device is on (unless SMART_SUSPEND is
> provided) during removal stage. But I think you are referring to the case
> when we call this one on the already suspended device (which is probably
> happens before managed resource tear down) and hence regulators will go
> into unbalanced state. Yeah, it would be nice to read some howto:s on
> the topic...
Exactly that - it doesn't come out of runtime suspend on unbind hence
any regulators disabled for that don't come back on line and we underflow.
My mental model of this stuff was wrong until recently as I assumed
we exited runtime suspend before entering remove, but in general that's not
the case.
>
> > > If following comments above and below you'd need to set the state
> > > to active here. If you go that way, make sure to add a comment to
> > > say why it is up here (and hopefully prevent someone thinking they can
> > > move it down).
> >
> > I'll make sure to write a comment warning others about moving the function call.
> >
> > > > + ret = devm_add_action_or_reset(dev, devm_ak8975_power_off, data);
> > > > + if (ret)
> > > > + return ret;
>
> Oh, true. Before accessing the device we should know what is the state of PM.
>
>
> > > > /* Enable runtime PM */
> > > > - pm_runtime_get_noresume(&client->dev);
> > > > - pm_runtime_set_active(&client->dev);
> > > > - pm_runtime_enable(&client->dev);
> > > > + ret = devm_pm_runtime_set_active_enabled(dev);
> > >
> > > This hits the race with whether we can query if the device is disabled mentioned
> > > above. Dance where we need to be able to check that before we turn runtime pm on
> > > so that we can correctly do regulator disables if we error out before here.
> >
> > So just do a devm_pm_runtime_enable() instead?
>
> This needs to be thought through...
>
> Jonathan, do we have already examples in IIO which do something similar
> in the correct way?
We've had a few 'fixes' around this recently rather than people generally getting
it right first time.
Sean (+CC) fixed a similar case deep in this patch:
https://lore.kernel.org/all/20250909-icm42pmreg-v4-1-2bf763662c5c@geanix.com/
>
next prev parent reply other threads:[~2026-04-29 15:10 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-27 20:09 [PATCH v0 00/14] iio: magnetometer: ak8975: Additional changes to the driver Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 01/14] drivers/iio/magnetometer/ak8975.c: fixup for the IWYU change Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 02/14] drivers/iio/magnetometer/ak8975.c: fixup for the errno fix Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 03/14] drivers/iio/magnetometer/ak8975.c: fixup for the iopoll.h conversion Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 04/14] iio: magnetometer: ak8975: Inline timeout constants Andy Shevchenko
2026-04-28 16:22 ` Jonathan Cameron
2026-04-28 17:06 ` Andy Shevchenko
2026-04-29 13:59 ` Joshua Crofts
2026-04-29 14:21 ` Andy Shevchenko
2026-04-29 14:27 ` Joshua Crofts
2026-04-27 20:09 ` [PATCH v0 05/14] iio: magnetometer: ak8975: Avoid using temporary variable Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 06/14] iio: magnetometer: ak8975: Drop duplicate NULL check Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 07/14] iio: magnetometer: ak8975: remove duplicate error message Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 08/14] iio: magnetometer: ak8975: Reduce usage of magic lengths of the buffer Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 09/14] iio: magnetometer: ak8975: Unify return code variable name Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 10/14] iio: magnetometer: ak8975: switch to using managed resources Andy Shevchenko
2026-04-28 16:32 ` Jonathan Cameron
2026-04-29 13:48 ` Joshua Crofts
2026-04-29 14:34 ` Andy Shevchenko
2026-04-29 15:10 ` Jonathan Cameron [this message]
2026-04-27 20:09 ` [PATCH v0 11/14] iio: magnetometer: ak8975: Consistently use 'data' parameter Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 12/14] iio: magnetometer: ak8975: Unify messages with help of dev_err_probe() Andy Shevchenko
2026-04-28 9:21 ` Joshua Crofts
2026-04-28 9:46 ` Andy Shevchenko
2026-04-28 9:52 ` Joshua Crofts
2026-04-27 20:09 ` [PATCH v0 13/14] iio: magnetometer: ak8975: Use temporary variable for struct device Andy Shevchenko
2026-04-27 20:09 ` [PATCH v0 14/14] iio: magnetometer: ak8975: Make use of the macros from bits.h Andy Shevchenko
2026-04-28 7:23 ` Joshua Crofts
2026-04-28 7:54 ` Andy Shevchenko
2026-04-27 20:19 ` [PATCH v0 00/14] iio: magnetometer: ak8975: Additional changes to the driver Andy Shevchenko
2026-04-28 6:37 ` Joshua Crofts
2026-04-28 7:03 ` Andy Shevchenko
2026-04-28 7:14 ` Joshua Crofts
2026-04-28 16:16 ` Jonathan Cameron
2026-04-28 16:23 ` Joshua Crofts
2026-04-28 16:35 ` Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260429161007.59d9436a@jic23-huawei \
--to=jic23@kernel.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=joshua.crofts1@gmail.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=sean@geanix.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox