aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
authorAndreas Platschek <andreas.platschek@opentech.at>2017-12-06 20:42:38 +0100
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>2017-12-18 23:05:11 +0100
commit2da6877f0e2ced7825a31556ada6b2ac2e50877f (patch)
treed9d4fcc54cd408afc583d1a93c8b0fdcc14c974e /drivers/rtc
parentrtc: ac100: Fix multiple race conditions (diff)
downloadlinux-dev-2da6877f0e2ced7825a31556ada6b2ac2e50877f.tar.xz
linux-dev-2da6877f0e2ced7825a31556ada6b2ac2e50877f.zip
rtc: omap: fix unbalanced clk_prepare_enable/clk_disable_unprepare
There are 2 error paths after clk_prepare_enable() was called, where clk_disable_unprepare() is missing. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Andreas Platschek <andreas.platschek@opentech.at> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-omap.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 1d666ac9ef70..09ef802d6e54 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -753,8 +753,10 @@ static int omap_rtc_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
rtc->base = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(rtc->base))
+ if (IS_ERR(rtc->base)) {
+ clk_disable_unprepare(rtc->clk);
return PTR_ERR(rtc->base);
+ }
platform_set_drvdata(pdev, rtc);
@@ -887,6 +889,7 @@ static int omap_rtc_probe(struct platform_device *pdev)
return 0;
err:
+ clk_disable_unprepare(rtc->clk);
device_init_wakeup(&pdev->dev, false);
rtc->type->lock(rtc);
pm_runtime_put_sync(&pdev->dev);