TC: Error handling clean-ups
authorMaciej W. Rozycki <macro@linux-mips.org>
Sun, 6 Apr 2014 19:52:37 +0000 (20:52 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 24 Nov 2014 06:45:25 +0000 (07:45 +0100)
Rewrite TURBOchannel error handling to use a common failure path, making
sure put_device is called for devices that failed initialization.  While
at it update printk calls to use pr_err rather than KERN_ERR.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/6701/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
drivers/tc/tc.c

index 946562389ca80fe07040536c108fdaa5d8bb59df..3be9519654e51018032623561a9a0b78f952ea7b 100644 (file)
@@ -83,8 +83,7 @@ static void __init tc_bus_add_devices(struct tc_bus *tbus)
                /* Found a board, allocate it an entry in the list */
                tdev = kzalloc(sizeof(*tdev), GFP_KERNEL);
                if (!tdev) {
-                       printk(KERN_ERR "tc%x: unable to allocate tc_dev\n",
-                              slot);
+                       pr_err("tc%x: unable to allocate tc_dev\n", slot);
                        goto out_err;
                }
                dev_set_name(&tdev->dev, "tc%x", slot);
@@ -117,10 +116,10 @@ static void __init tc_bus_add_devices(struct tc_bus *tbus)
                        tdev->resource.start = extslotaddr;
                        tdev->resource.end = extslotaddr + devsize - 1;
                } else {
-                       printk(KERN_ERR "%s: Cannot provide slot space "
-                              "(%dMiB required, up to %dMiB supported)\n",
-                              dev_name(&tdev->dev), devsize >> 20,
-                              max(slotsize, extslotsize) >> 20);
+                       pr_err("%s: Cannot provide slot space "
+                              "(%ldMiB required, up to %ldMiB supported)\n",
+                              dev_name(&tdev->dev), (long)(devsize >> 20),
+                              (long)(max(slotsize, extslotsize) >> 20));
                        kfree(tdev);
                        goto out_err;
                }
@@ -147,14 +146,12 @@ static int __init tc_init(void)
 {
        /* Initialize the TURBOchannel bus */
        if (tc_bus_get_info(&tc_bus))
-               return 0;
+               goto out_err;
 
        INIT_LIST_HEAD(&tc_bus.devices);
        dev_set_name(&tc_bus.dev, "tc");
-       if (device_register(&tc_bus.dev)) {
-               put_device(&tc_bus.dev);
-               return 0;
-       }
+       if (device_register(&tc_bus.dev))
+               goto out_err_device;
 
        if (tc_bus.info.slot_size) {
                unsigned int tc_clock = tc_get_speed(&tc_bus) / 100000;
@@ -172,8 +169,8 @@ static int __init tc_init(void)
                tc_bus.resource[0].flags = IORESOURCE_MEM;
                if (request_resource(&iomem_resource,
                                     &tc_bus.resource[0]) < 0) {
-                       printk(KERN_ERR "tc: Cannot reserve resource\n");
-                       return 0;
+                       pr_err("tc: Cannot reserve resource\n");
+                       goto out_err_device;
                }
                if (tc_bus.ext_slot_size) {
                        tc_bus.resource[1].start = tc_bus.ext_slot_base;
@@ -184,10 +181,8 @@ static int __init tc_init(void)
                        tc_bus.resource[1].flags = IORESOURCE_MEM;
                        if (request_resource(&iomem_resource,
                                             &tc_bus.resource[1]) < 0) {
-                               printk(KERN_ERR
-                                      "tc: Cannot reserve resource\n");
-                               release_resource(&tc_bus.resource[0]);
-                               return 0;
+                               pr_err("tc: Cannot reserve resource\n");
+                               goto out_err_resource;
                        }
                }
 
@@ -195,6 +190,13 @@ static int __init tc_init(void)
        }
 
        return 0;
+
+out_err_resource:
+       release_resource(&tc_bus.resource[0]);
+out_err_device:
+       put_device(&tc_bus.dev);
+out_err:
+       return 0;
 }
 
 subsys_initcall(tc_init);