提交 662aa6d7 编写于 作者: I Inki Dae 提交者: Inki Dae

drm/exynos: add exception codes to exynos_drm_fbdev_create()

This patch releases allocated resources correctly.
Signed-off-by: NInki Dae <inki.dae@samsung.com>
Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
上级 db7e55ae
...@@ -164,7 +164,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper, ...@@ -164,7 +164,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
exynos_gem_obj = exynos_drm_gem_create(dev, 0, size); exynos_gem_obj = exynos_drm_gem_create(dev, 0, size);
if (IS_ERR(exynos_gem_obj)) { if (IS_ERR(exynos_gem_obj)) {
ret = PTR_ERR(exynos_gem_obj); ret = PTR_ERR(exynos_gem_obj);
goto out; goto err_release_framebuffer;
} }
exynos_fbdev->exynos_gem_obj = exynos_gem_obj; exynos_fbdev->exynos_gem_obj = exynos_gem_obj;
...@@ -174,7 +174,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper, ...@@ -174,7 +174,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
if (IS_ERR_OR_NULL(helper->fb)) { if (IS_ERR_OR_NULL(helper->fb)) {
DRM_ERROR("failed to create drm framebuffer.\n"); DRM_ERROR("failed to create drm framebuffer.\n");
ret = PTR_ERR(helper->fb); ret = PTR_ERR(helper->fb);
goto out; goto err_destroy_gem;
} }
helper->fbdev = fbi; helper->fbdev = fbi;
...@@ -186,14 +186,24 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper, ...@@ -186,14 +186,24 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
ret = fb_alloc_cmap(&fbi->cmap, 256, 0); ret = fb_alloc_cmap(&fbi->cmap, 256, 0);
if (ret) { if (ret) {
DRM_ERROR("failed to allocate cmap.\n"); DRM_ERROR("failed to allocate cmap.\n");
goto out; goto err_destroy_framebuffer;
} }
ret = exynos_drm_fbdev_update(helper, helper->fb); ret = exynos_drm_fbdev_update(helper, helper->fb);
if (ret < 0) { if (ret < 0)
fb_dealloc_cmap(&fbi->cmap); goto err_dealloc_cmap;
goto out;
} mutex_unlock(&dev->struct_mutex);
return ret;
err_dealloc_cmap:
fb_dealloc_cmap(&fbi->cmap);
err_destroy_framebuffer:
drm_framebuffer_cleanup(helper->fb);
err_destroy_gem:
exynos_drm_gem_destroy(exynos_gem_obj);
err_release_framebuffer:
framebuffer_release(fbi);
/* /*
* if failed, all resources allocated above would be released by * if failed, all resources allocated above would be released by
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册