[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
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.