[PATCH] watchdog: starfive: fix runtime PM usage counter leak in pm_start
manushprajwal <[email protected]>
| Newsgroups | org.kernel.vger.linux-watchdog |
|---|---|
| Message-ID | <[email protected]> |
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); } -- 2.46.2.windows.1