drm/exynos: fix not to remain exynos_gem_obj as a leak
authorYoungJun Cho <yj44.cho@samsung.com>
Mon, 1 Jul 2013 02:17:12 +0000 (11:17 +0900)
committerInki Dae <inki.dae@samsung.com>
Thu, 4 Jul 2013 06:55:36 +0000 (15:55 +0900)
The exynos_drm_gem_create() only calls drm_gem_object_release()
when exynos_drm_alloc_buf() is failed, and exynos_gem_obj remains
as a leak, which is allocated in exynos_drm_gem_init().
So this patch fixes it not to remain as a leak.

Signed-off-by: YoungJun Cho <yj44.cho@samsung.com>
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_drm_gem.c

index c3f15e7..24c22a8 100644 (file)
@@ -246,13 +246,14 @@ struct exynos_drm_gem_obj *exynos_drm_gem_create(struct drm_device *dev,
        exynos_gem_obj->flags = flags;
 
        ret = exynos_drm_alloc_buf(dev, buf, flags);
-       if (ret < 0) {
-               drm_gem_object_release(&exynos_gem_obj->base);
-               goto err_fini_buf;
-       }
+       if (ret < 0)
+               goto err_gem_fini;
 
        return exynos_gem_obj;
 
+err_gem_fini:
+       drm_gem_object_release(&exynos_gem_obj->base);
+       kfree(exynos_gem_obj);
 err_fini_buf:
        exynos_drm_fini_buf(dev, buf);
        return ERR_PTR(ret);