Re: [PATCH -next] i2c: omap: fix PM reference leak in omap_i2c_probe()

From: Vignesh Raghavendra
Date: Sat Apr 10 2021 - 03:00:45 EST


Hi.

On 4/8/21 6:26 PM, Li Huafei wrote:
> pm_runtime_get_sync will increment pm usage counter even it failed.
> Forgetting to putting operation will result in reference leak here. Fix
> it by replacing it with pm_runtime_resume_and_get to keep usage counter
> balanced.
>
> Reported-by: Hulk Robot <hulkci@xxxxxxxxxx>
> Signed-off-by: Li Huafei <lihuafei1@xxxxxxxxxx>
> ---
> drivers/i2c/busses/i2c-omap.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
> index 12ac4212aded..edbe498d49b8 100644
> --- a/drivers/i2c/busses/i2c-omap.c
> +++ b/drivers/i2c/busses/i2c-omap.c
> @@ -1404,7 +1404,7 @@ omap_i2c_probe(struct platform_device *pdev)
> pm_runtime_set_autosuspend_delay(omap->dev, OMAP_I2C_PM_TIMEOUT);
> pm_runtime_use_autosuspend(omap->dev);
>
> - r = pm_runtime_get_sync(omap->dev);
> + r = pm_runtime_resume_and_get(omap->dev);
> if (r < 0)
> goto err_free_mem;
>
> @@ -1525,7 +1525,7 @@ static int omap_i2c_remove(struct platform_device *pdev)
> int ret;
>
> i2c_del_adapter(&omap->adapter);
> - ret = pm_runtime_get_sync(&pdev->dev);
> + ret = pm_runtime_resume_and_get(&pdev->dev);
> if (ret < 0)
> return ret;
>
>
There is a similar patch at: lore.kernel.org/r/20210407033030.13419-1-dinghao.liu@xxxxxxxxxx
But seems like this patch is better as it fixes module remove path as well.
Would appreciate if you could work with author of above patch and come up
with a single patch.

Could you add stable tag and repost given that pm_runtime_resume_and_get()
API is backported to stable kernels such as v5.4?

Regards
Vignesh