* [PATCH] iio: proximity: pulsedlight: fix iio_device left registered on PM setup failure
@ 2026-08-28 10:59 Cong Nguyen
2026-08-29 16:34 ` Joshua Crofts
0 siblings, 1 reply; 3+ messages in thread
From: Cong Nguyen @ 2026-08-28 10:59 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Matt Ranostay, Andy Shevchenko, David Lechner, Nuno Sá,
linux-iio, linux-kernel, Cong Nguyen
pm_runtime_set_active() failing in probe() jumps to error_unreg_buffer,
which only calls iio_triggered_buffer_cleanup() -- it does not undo the
iio_device_register() that already succeeded a few lines above. probe()
then returns the error, the devm-managed indio_dev is freed, but the
iio core still has it registered: the sysfs/chardev nodes stay live and
point at freed memory.
Add an error_unreg_dev label that unregisters the iio device before
falling through to the existing buffer cleanup, mirroring the teardown
order already used in lidar_remove().
Fixes: 4ac4e086fd8c ("iio: pulsedlight-lidar-lite: add runtime PM")
Assisted-by: Claude:claude-opus-4
Signed-off-by: Cong Nguyen <congnt264@gmail.com>
---
drivers/iio/proximity/pulsedlight-lidar-lite-v2.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
index 400477b4c740..8a9ee21f2bf6 100644
--- a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
+++ b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
@@ -294,12 +294,14 @@ static int lidar_probe(struct i2c_client *client)
ret = pm_runtime_set_active(&client->dev);
if (ret)
- goto error_unreg_buffer;
+ goto error_unreg_dev;
pm_runtime_enable(&client->dev);
pm_runtime_idle(&client->dev);
return 0;
+error_unreg_dev:
+ iio_device_unregister(indio_dev);
error_unreg_buffer:
iio_triggered_buffer_cleanup(indio_dev);
--
2.25.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] iio: proximity: pulsedlight: fix iio_device left registered on PM setup failure
2026-08-28 10:59 [PATCH] iio: proximity: pulsedlight: fix iio_device left registered on PM setup failure Cong Nguyen
@ 2026-08-29 16:34 ` Joshua Crofts
2026-08-29 23:48 ` Jonathan Cameron
0 siblings, 1 reply; 3+ messages in thread
From: Joshua Crofts @ 2026-08-29 16:34 UTC (permalink / raw)
To: Cong Nguyen
Cc: Jonathan Cameron, Matt Ranostay, Andy Shevchenko, David Lechner,
Nuno Sá,
linux-iio, linux-kernel
On Fri, 28 Aug 2026 17:59:09 +0700
Cong Nguyen <congnt264@gmail.com> wrote:
> pm_runtime_set_active() failing in probe() jumps to error_unreg_buffer,
> which only calls iio_triggered_buffer_cleanup() -- it does not undo the
> iio_device_register() that already succeeded a few lines above. probe()
> then returns the error, the devm-managed indio_dev is freed, but the
> iio core still has it registered: the sysfs/chardev nodes stay live and
> point at freed memory.
>
> Add an error_unreg_dev label that unregisters the iio device before
> falling through to the existing buffer cleanup, mirroring the teardown
> order already used in lidar_remove().
>
> Fixes: 4ac4e086fd8c ("iio: pulsedlight-lidar-lite: add runtime PM")
> Assisted-by: Claude:claude-opus-4
> Signed-off-by: Cong Nguyen <congnt264@gmail.com>
> ---
> drivers/iio/proximity/pulsedlight-lidar-lite-v2.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> index 400477b4c740..8a9ee21f2bf6 100644
> --- a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> +++ b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> @@ -294,12 +294,14 @@ static int lidar_probe(struct i2c_client *client)
>
> ret = pm_runtime_set_active(&client->dev);
> if (ret)
> - goto error_unreg_buffer;
> + goto error_unreg_dev;
> pm_runtime_enable(&client->dev);
> pm_runtime_idle(&client->dev);
>
> return 0;
Hmm, you should just return iio_device_register() here instead of 0,
as that should always be the last function called in any *_probe()
function.
No need to add a new label then.
> +error_unreg_dev:
> + iio_device_unregister(indio_dev);
> error_unreg_buffer:
> iio_triggered_buffer_cleanup(indio_dev);
>
--
Kind regards,
Joshua Crofts
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] iio: proximity: pulsedlight: fix iio_device left registered on PM setup failure
2026-08-29 16:34 ` Joshua Crofts
@ 2026-08-29 23:48 ` Jonathan Cameron
0 siblings, 0 replies; 3+ messages in thread
From: Jonathan Cameron @ 2026-08-29 23:48 UTC (permalink / raw)
To: Joshua Crofts
Cc: Cong Nguyen, Matt Ranostay, Andy Shevchenko, David Lechner,
Nuno Sá,
linux-iio, linux-kernel
On Sat, 29 Aug 2026 18:34:43 +0200
Joshua Crofts <joshua.crofts1@gmail.com> wrote:
> On Fri, 28 Aug 2026 17:59:09 +0700
> Cong Nguyen <congnt264@gmail.com> wrote:
>
> > pm_runtime_set_active() failing in probe() jumps to error_unreg_buffer,
> > which only calls iio_triggered_buffer_cleanup() -- it does not undo the
> > iio_device_register() that already succeeded a few lines above. probe()
> > then returns the error, the devm-managed indio_dev is freed, but the
> > iio core still has it registered: the sysfs/chardev nodes stay live and
> > point at freed memory.
> >
> > Add an error_unreg_dev label that unregisters the iio device before
> > falling through to the existing buffer cleanup, mirroring the teardown
> > order already used in lidar_remove().
> >
> > Fixes: 4ac4e086fd8c ("iio: pulsedlight-lidar-lite: add runtime PM")
> > Assisted-by: Claude:claude-opus-4
> > Signed-off-by: Cong Nguyen <congnt264@gmail.com>
> > ---
> > drivers/iio/proximity/pulsedlight-lidar-lite-v2.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> > index 400477b4c740..8a9ee21f2bf6 100644
> > --- a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> > +++ b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> > @@ -294,12 +294,14 @@ static int lidar_probe(struct i2c_client *client)
> >
> > ret = pm_runtime_set_active(&client->dev);
> > if (ret)
> > - goto error_unreg_buffer;
> > + goto error_unreg_dev;
> > pm_runtime_enable(&client->dev);
> > pm_runtime_idle(&client->dev);
> >
> > return 0;
>
> Hmm, you should just return iio_device_register() here instead of 0,
> as that should always be the last function called in any *_probe()
> function.
>
> No need to add a new label then.
Lets keep this fix minimal. Agreed that it gets interesting
if runtime pm is enabled only after the userspace interfaces
are exposed, but we'd need to find if there is actual bug to
'fix' it as opposed to moving to a easier to understand flow.
So applied this one to the fixes-togreg branch of iio.git
Thanks,
Jonathan
>
> > +error_unreg_dev:
> > + iio_device_unregister(indio_dev);
> > error_unreg_buffer:
> > iio_triggered_buffer_cleanup(indio_dev);
> >
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-08-29 23:48 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-28 10:59 [PATCH] iio: proximity: pulsedlight: fix iio_device left registered on PM setup failure Cong Nguyen
2026-08-29 16:34 ` Joshua Crofts
2026-08-29 23:48 ` Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®