powerpc/via-pmu: fix error path in find_via_pmu()
authorPhil Carmody <pc+lkml@asdf.org>
Tue, 16 Sep 2014 22:00:53 +0000 (01:00 +0300)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 17 Mar 2015 00:56:34 +0000 (11:56 +1100)
Cleanup was not in the reverse order from the set-up, so not all
the gotos made sense, and also it was being avoided completely upon
failure of init_pmu().

Signed-off-by: Phil Carmody <pc+lkml@asdf.org>
Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
drivers/macintosh/via-pmu.c

index dee88e59f0d34be1359661368799d8546668eda7..62212358640d31f8a24c90a9b66015aae9526100 100644 (file)
@@ -332,7 +332,7 @@ int __init find_via_pmu(void)
                }
                if (gpio_reg == NULL) {
                        printk(KERN_ERR "via-pmu: Can't find GPIO reg !\n");
-                       goto fail_gpio;
+                       goto fail;
                }
        } else
                pmu_kind = PMU_UNKNOWN;
@@ -340,7 +340,7 @@ int __init find_via_pmu(void)
        via = ioremap(taddr, 0x2000);
        if (via == NULL) {
                printk(KERN_ERR "via-pmu: Can't map address !\n");
-               goto fail;
+               goto fail_via_remap;
        }
        
        out_8(&via[IER], IER_CLR | 0x7f);       /* disable all intrs */
@@ -348,10 +348,8 @@ int __init find_via_pmu(void)
 
        pmu_state = idle;
 
-       if (!init_pmu()) {
-               via = NULL;
-               return 0;
-       }
+       if (!init_pmu())
+               goto fail_init;
 
        printk(KERN_INFO "PMU driver v%d initialized for %s, firmware: %02x\n",
               PMU_DRIVER_VERSION, pbook_type[pmu_kind], pmu_version);
@@ -359,11 +357,15 @@ int __init find_via_pmu(void)
        sys_ctrler = SYS_CTRLER_PMU;
        
        return 1;
- fail:
-       of_node_put(vias);
+
+ fail_init:
+       iounmap(via);
+       via = NULL;
+ fail_via_remap:
        iounmap(gpio_reg);
        gpio_reg = NULL;
- fail_gpio:
+ fail:
+       of_node_put(vias);
        vias = NULL;
        return 0;
 }