[PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create()

2015-09-01 Thread Gustavo Padovan
Hi Joonyoung,

2015-09-01 Joonyoung Shim :

> Using exynos_drm_framebuffer_init(), redundant codes can be removed.
> 
> Signed-off-by: Joonyoung Shim 
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fb.c | 47 
> ++
>  1 file changed, 13 insertions(+), 34 deletions(-)

Reviewed-by: Gustavo Padovan 

Gustavo


[PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create()

2015-09-01 Thread Joonyoung Shim
Using exynos_drm_framebuffer_init(), redundant codes can be removed.

Signed-off-by: Joonyoung Shim 
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c | 47 ++
 1 file changed, 13 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c 
b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index 8e5d3eb..9accc0d 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -174,57 +174,36 @@ static struct drm_framebuffer *
 exynos_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
  struct drm_mode_fb_cmd2 *mode_cmd)
 {
+   struct exynos_drm_gem_obj *gem_objs[MAX_FB_BUFFER];
struct drm_gem_object *obj;
-   struct exynos_drm_gem_obj *exynos_gem_obj;
-   struct exynos_drm_fb *exynos_fb;
-   int i, ret;
-
-   exynos_fb = kzalloc(sizeof(*exynos_fb), GFP_KERNEL);
-   if (!exynos_fb)
-   return ERR_PTR(-ENOMEM);
-
-   exynos_fb->buf_cnt = drm_format_num_planes(mode_cmd->pixel_format);
-
-   DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
+   struct drm_framebuffer *fb;
+   int i;
+   int ret;

-   for (i = 0; i < exynos_fb->buf_cnt; i++) {
+   for (i = 0; i < drm_format_num_planes(mode_cmd->pixel_format); i++) {
obj = drm_gem_object_lookup(dev, file_priv,
-   mode_cmd->handles[i]);
+   mode_cmd->handles[i]);
if (!obj) {
DRM_ERROR("failed to lookup gem object\n");
ret = -ENOENT;
-   exynos_fb->buf_cnt = i;
goto err;
}

-   exynos_gem_obj = to_exynos_gem_obj(obj);
-   exynos_fb->exynos_gem_obj[i] = exynos_gem_obj;
-
-   ret = check_fb_gem_memory_type(dev, exynos_gem_obj);
-   if (ret < 0)
-   goto err;
+   gem_objs[i] = to_exynos_gem_obj(obj);
}

-   drm_helper_mode_fill_fb_struct(_fb->fb, mode_cmd);
-
-   ret = drm_framebuffer_init(dev, _fb->fb, _drm_fb_funcs);
-   if (ret) {
-   DRM_ERROR("failed to init framebuffer.\n");
+   fb = exynos_drm_framebuffer_init(dev, mode_cmd, gem_objs, i);
+   if (IS_ERR(fb)) {
+   ret = PTR_ERR(fb);
goto err;
}

-   return _fb->fb;
+   return fb;

 err:
-   for (i = 0; i < exynos_fb->buf_cnt; i++) {
-   struct drm_gem_object *obj;
+   while (i--)
+   drm_gem_object_unreference_unlocked(_objs[i]->base);

-   obj = _fb->exynos_gem_obj[i]->base;
-   if (obj)
-   drm_gem_object_unreference_unlocked(obj);
-   }
-
-   kfree(exynos_fb);
return ERR_PTR(ret);
 }

-- 
1.9.1