ps3fb: Correct handling of device opening in ps3fb_probe()
authorGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Wed, 10 Jun 2009 04:38:44 +0000 (04:38 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 15 Jun 2009 03:26:19 +0000 (13:26 +1000)
- ps3_open_hv_device() returns a standard error value,
  - Add missing call to ps3_close_hv_device() in the error path.

Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Cc: linux-fbdev-devel@lists.sourceforge.net
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
drivers/video/ps3fb.c

index a74501815333bc17d41d35297bdafda786072e13..542ffc306c72c0fee5010c73443ee018f700f49a 100644 (file)
@@ -985,7 +985,7 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev)
 {
        struct fb_info *info;
        struct ps3fb_par *par;
-       int retval = -ENOMEM;
+       int retval;
        u64 ddr_lpar = 0;
        u64 lpar_dma_control = 0;
        u64 lpar_driver_info = 0;
@@ -1003,8 +1003,8 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev)
                return -ENOMEM;
        }
 
-       status = ps3_open_hv_device(dev);
-       if (status) {
+       retval = ps3_open_hv_device(dev);
+       if (retval) {
                dev_err(&dev->core, "%s: ps3_open_hv_device failed\n",
                        __func__);
                goto err;
@@ -1027,7 +1027,8 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev)
                        "%s: lv1_gpu_context_attribute DISPLAY_SYNC failed: "
                        "%d\n",
                        __func__, status);
-               goto err;
+               retval = -ENODEV;
+               goto err_close_device;
        }
 #endif
 #ifdef HEAD_B
@@ -1040,7 +1041,8 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev)
                        "%s: lv1_gpu_context_attribute DISPLAY_SYNC failed: "
                        "%d\n",
                        __func__, status);
-               goto err;
+               retval = -ENODEV;
+               goto err_close_device;
        }
 #endif
 
@@ -1057,7 +1059,7 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev)
        if (status) {
                dev_err(&dev->core, "%s: lv1_gpu_memory_allocate failed: %d\n",
                        __func__, status);
-               goto err;
+               goto err_close_device;
        }
        dev_dbg(&dev->core, "ddr:lpar:0x%llx\n", ddr_lpar);
 
@@ -1221,6 +1223,8 @@ err_gpu_context_free:
        lv1_gpu_context_free(ps3fb.context_handle);
 err_gpu_memory_free:
        lv1_gpu_memory_free(ps3fb.memory_handle);
+err_close_device:
+       ps3_close_hv_device(dev);
 err:
        return retval;
 }