FAILED: patch "[PATCH] iio: light: apds9306: fix PM reference leak in" failed to apply to 6.18-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x d378fceaafd79e0dc59d3546bda251a3058062c0
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090902-spruce-sleeve-2bcf@gregkh' --subject-prefix 'PATCH 6.18.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d378fceaafd79e0dc59d3546bda251a3058062c0 Mon Sep 17 00:00:00 2001
From: Moksh Panicker <[email protected]>
Date: Sun, 2 Aug 2026 19:07:01 +0000
Subject: [PATCH] iio: light: apds9306: fix PM reference leak in
apds9306_read_data()
apds9306_read_data() calls pm_runtime_resume_and_get() but several error paths return directly without calling pm_runtime_put_autosuspend(), leaking the runtime PM reference and preventing the device from autosuspending.
Use PM_RUNTIME_ACQUIRE_AUTOSUSPEND() and PM_RUNTIME_ACQUIRE_ERR() to automatically handle runtime PM reference release on all return paths.
drivers/iio/light/apds9306.c +3 -5
@@ -469,9 +469,9 @@ static int apds9306_read_data(struct apds9306_data *data, int *val, int reg)int status =0 ;u8 buff[3 ]; - ret =pm_runtime_resume_and_get (data->dev); -if (ret) -return ret; +PM_RUNTIME_ACQUIRE_AUTOSUSPEND (data->dev, pm); +if (PM_RUNTIME_ACQUIRE_ERR (&pm)) +return PM_RUNTIME_ACQUIRE_ERR (&pm); ret =regmap_field_read (rf->intg_time, &intg_time_idx);if (ret)
@@ -535,8 +535,6 @@ static int apds9306_read_data(struct apds9306_data *data, int *val, int reg) *val =get_unaligned_le24 (&buff); -pm_runtime_put_autosuspend (data->dev); -return 0 ; }
Sasha Levin
maintainerPATCH 1/2 PM: runtime: Wrapper macros for ACQUIRE()/ACQUIRE_ERR()
From: "Rafael J. Wysocki" <[email protected]>
[ Upstream commit ef8057b07c72a817537856b98d6e7493b9404eaf ]
Add wrapper macros for ACQUIRE()/ACQUIRE_ERR() and runtime PM usage counter guards introduced recently: pm_runtime_active_try, pm_runtime_active_auto_try, pm_runtime_active_try_enabled, and pm_runtime_active_auto_try_enabled.
The new macros should be more straightforward to use.
For example, they can be used for rewriting a piece of code like below:
ACQUIRE(pm_runtime_active_try, pm)(dev);
if ((ret = ACQUIRE_ERR(pm_runtime_active_try, &pm)))
return ret;in the following way:
PM_RUNTIME_ACQUIRE(dev, pm);
if ((ret = PM_RUNTIME_ACQUIRE_ERR(&pm)))
return ret;If the original code does not care about the specific error code returned when attepmting to resume the device:
ACQUIRE(pm_runtime_active_try, pm)(dev);
if (ACQUIRE_ERR(pm_runtime_active_try, &pm))
return -ENXIO;it may be changed like this:
PM_RUNTIME_ACQUIRE(dev, pm);
if (PM_RUNTIME_ACQUIRE_ERR(&pm))
return -ENXIO;Stable-dep-of: d378fceaafd7 ("iio: light: apds9306: fix PM reference leak in apds9306_read_data()")
--- include/linux/pm_runtime.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
include/linux/pm_runtime.h +24 -0
@@ -637,6 +637,30 @@ DEFINE_GUARD_COND(pm_runtime_active_auto, _try,DEFINE_GUARD_COND (pm_runtime_active_auto, _try_enabled,pm_runtime_resume_and_get (_T), _RET ==0 ) +/* ACQUIRE() wrapper macros for the guards defined above. */ + +#define PM_RUNTIME_ACQUIRE (_dev, _var) \ + ACQUIRE(pm_runtime_active_try, _var)(_dev) + +#define PM_RUNTIME_ACQUIRE_AUTOSUSPEND (_dev, _var) \ + ACQUIRE(pm_runtime_active_auto_try, _var)(_dev) + +#define PM_RUNTIME_ACQUIRE_IF_ENABLED (_dev, _var) \ + ACQUIRE(pm_runtime_active_try_enabled, _var)(_dev) + +#define PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND (_dev, _var) \ + ACQUIRE(pm_runtime_active_auto_try_enabled, _var)(_dev) + +/* +* ACQUIRE_ERR() wrapper macro for guard pm_runtime_active. +* +* Always check PM_RUNTIME_ACQUIRE_ERR() after using one of the +* PM_RUNTIME_ACQUIRE*() macros defined above (yes, it can be used with +* any of them) and if it is nonzero, avoid accessing the given device. +*/ +#define PM_RUNTIME_ACQUIRE_ERR (_var_ptr) \ + ACQUIRE_ERR(pm_runtime_active, _var_ptr) +/** * pm_runtime_put_sync - Drop device usage counter and run "idle check" if 0. * @dev: Target device.
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 iio: light: apds9306: fix PM reference leak in apds9306_read_data()
From: Moksh Panicker <[email protected]>
[ Upstream commit d378fceaafd79e0dc59d3546bda251a3058062c0 ]
apds9306_read_data() calls pm_runtime_resume_and_get() but several error paths return directly without calling pm_runtime_put_autosuspend(), leaking the runtime PM reference and preventing the device from autosuspending.
Use PM_RUNTIME_ACQUIRE_AUTOSUSPEND() and PM_RUNTIME_ACQUIRE_ERR() to automatically handle runtime PM reference release on all return paths.
--- drivers/iio/light/apds9306.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
drivers/iio/light/apds9306.c +3 -5
@@ -471,9 +471,9 @@ static int apds9306_read_data(struct apds9306_data *data, int *val, int reg)int status =0 ;u8 buff[3 ]; - ret =pm_runtime_resume_and_get (data->dev); -if (ret) -return ret; +PM_RUNTIME_ACQUIRE_AUTOSUSPEND (data->dev, pm); +if (PM_RUNTIME_ACQUIRE_ERR (&pm)) +return PM_RUNTIME_ACQUIRE_ERR (&pm); ret =regmap_field_read (rf->intg_time, &intg_time_idx);if (ret)
@@ -537,8 +537,6 @@ static int apds9306_read_data(struct apds9306_data *data, int *val, int reg) *val =get_unaligned_le24 (&buff); -pm_runtime_put_autosuspend (data->dev); -return 0 ; }
Signature · 1 line
2.53.0