Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 662aa6d7 authored by Inki Dae's avatar Inki Dae Committed by Inki Dae
Browse files

drm/exynos: add exception codes to exynos_drm_fbdev_create()



This patch releases allocated resources correctly.

Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
parent db7e55ae
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -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);
	if (IS_ERR(exynos_gem_obj)) {
		ret = PTR_ERR(exynos_gem_obj);
		goto out;
		goto err_release_framebuffer;
	}

	exynos_fbdev->exynos_gem_obj = exynos_gem_obj;
@@ -174,7 +174,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
	if (IS_ERR_OR_NULL(helper->fb)) {
		DRM_ERROR("failed to create drm framebuffer.\n");
		ret = PTR_ERR(helper->fb);
		goto out;
		goto err_destroy_gem;
	}

	helper->fbdev = fbi;
@@ -186,14 +186,24 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
	ret = fb_alloc_cmap(&fbi->cmap, 256, 0);
	if (ret) {
		DRM_ERROR("failed to allocate cmap.\n");
		goto out;
		goto err_destroy_framebuffer;
	}

	ret = exynos_drm_fbdev_update(helper, helper->fb);
	if (ret < 0) {
	if (ret < 0)
		goto err_dealloc_cmap;

	mutex_unlock(&dev->struct_mutex);
	return ret;

err_dealloc_cmap:
	fb_dealloc_cmap(&fbi->cmap);
		goto out;
	}
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