rtc: omap: fix unbalanced clk_prepare_enable/clk_disable_unprepare
authorAndreas Platschek <andreas.platschek@opentech.at>
Wed, 6 Dec 2017 19:42:38 +0000 (20:42 +0100)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Mon, 18 Dec 2017 22:05:11 +0000 (23:05 +0100)
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>
drivers/rtc/rtc-omap.c

index 1d666ac..09ef802 100644 (file)
@@ -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);