Skip to content

Commit

Permalink
drm/exynos: cleanup to get gem object for fb
Browse files Browse the repository at this point in the history
Current codes get first gem object and then again get remain gem
objects. They can be unified to one routine.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
  • Loading branch information
Joonyoung Shim authored and Inki Dae committed Sep 2, 2015
1 parent ee885ca commit dcbb85a
Showing 1 changed file with 8 additions and 15 deletions.
23 changes: 8 additions & 15 deletions drivers/gpu/drm/exynos/exynos_drm_fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,54 +179,47 @@ exynos_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
if (!exynos_fb)
return ERR_PTR(-ENOMEM);

obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]);
if (!obj) {
DRM_ERROR("failed to lookup gem object\n");
ret = -ENOENT;
goto err_free;
}

drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
exynos_fb->exynos_gem_obj[0] = to_exynos_gem_obj(obj);
exynos_fb->buf_cnt = drm_format_num_planes(mode_cmd->pixel_format);

DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);

for (i = 1; i < exynos_fb->buf_cnt; i++) {
for (i = 0; i < exynos_fb->buf_cnt; i++) {
obj = drm_gem_object_lookup(dev, file_priv,
mode_cmd->handles[i]);
if (!obj) {
DRM_ERROR("failed to lookup gem object\n");
ret = -ENOENT;
exynos_fb->buf_cnt = i;
goto err_unreference;
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_unreference;
goto err;
}

drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);

ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
if (ret) {
DRM_ERROR("failed to init framebuffer.\n");
goto err_unreference;
goto err;
}

return &exynos_fb->fb;

err_unreference:
err:
for (i = 0; i < exynos_fb->buf_cnt; i++) {
struct drm_gem_object *obj;

obj = &exynos_fb->exynos_gem_obj[i]->base;
if (obj)
drm_gem_object_unreference_unlocked(obj);
}
err_free:

kfree(exynos_fb);
return ERR_PTR(ret);
}
Expand Down

0 comments on commit dcbb85a

Please sign in to comment.