]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
watchdog: davinci_wdt: fix error handling in davinci_wdt_probe()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Fri, 23 Mar 2018 21:36:46 +0000 (00:36 +0300)
committerWim Van Sebroeck <wim@linux-watchdog.org>
Mon, 26 Mar 2018 18:47:56 +0000 (20:47 +0200)
clk_disable_unprepare() was added to one error path,
but there is another one. The patch makes sure clk is
disabled at the both of them.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/watchdog/davinci_wdt.c

index 3e4c592c239f5a7701beafaa939d3d4d438ba9e8..6c6594261cb70095410d051d93966f84cd7e0d0a 100644 (file)
@@ -236,15 +236,22 @@ static int davinci_wdt_probe(struct platform_device *pdev)
 
        wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        davinci_wdt->base = devm_ioremap_resource(dev, wdt_mem);
-       if (IS_ERR(davinci_wdt->base))
-               return PTR_ERR(davinci_wdt->base);
+       if (IS_ERR(davinci_wdt->base)) {
+               ret = PTR_ERR(davinci_wdt->base);
+               goto err_clk_disable;
+       }
 
        ret = watchdog_register_device(wdd);
-       if (ret < 0) {
-               clk_disable_unprepare(davinci_wdt->clk);
+       if (ret) {
                dev_err(dev, "cannot register watchdog device\n");
+               goto err_clk_disable;
        }
 
+       return 0;
+
+err_clk_disable:
+       clk_disable_unprepare(davinci_wdt->clk);
+
        return ret;
 }