Re: [PATCH] watchdog: starfive: fix runtime PM usage counter leak in pm_start

Guenter Roeck <[email protected]>
Newsgroups org.kernel.vger.linux-watchdog
Message-ID <[email protected]>
On 8/23/26 04:22, manushprajwal wrote:
> starfive_wdt_pm_start() calls pm_runtime_get_sync() and returns its
> error code directly on failure. Per Documentation/power/runtime_pm.rst,
> pm_runtime_get_sync() does not drop the usage counter on error, so the
> caller is expected to release the reference itself. The early return
> here skips that, leaking a runtime PM usage count on wdd->parent on
> every failed resume, which prevents the device from being suspended
> correctly afterwards.
> 
> Fix it by calling pm_runtime_put_noidle() before returning, mirroring
> the same balance the counterpart starfive_wdt_pm_stop() already
> maintains with pm_runtime_put_sync().
> 
> Signed-off-by: manushprajwal <[email protected]>
> ---
>   drivers/watchdog/starfive-wdt.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/watchdog/starfive-wdt.c b/drivers/watchdog/starfive-wdt.c
> index af55adc4a..ecb704b2e 100644
> --- a/drivers/watchdog/starfive-wdt.c
> +++ b/drivers/watchdog/starfive-wdt.c
> @@ -373,8 +373,10 @@ static int starfive_wdt_pm_start(struct watchdog_device *wdd)
>   	struct starfive_wdt *wdt = watchdog_get_drvdata(wdd);
>   	int ret = pm_runtime_get_sync(wdd->parent);
>   
> -	if (ret < 0)
> +	if (ret < 0) {
> +		pm_runtime_put_noidle(wdd->parent);
>   		return ret;
> +	}
>   
>   	return starfive_wdt_start(wdt);
>   }

As Sashiko points out, there is still a runtime PM leak if starfive_wdt_start()
fails (plus all the other issues in the driver, but those can be fixed with
separate patches).

Thanks,
Guenter
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.