@@ -132,6 +132,7 @@ komeda_fb_create(struct drm_device *dev, struct drm_file *file,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
struct komeda_dev *mdev = dev->dev_private;
+ struct drm_gem_object *objs[4];
struct komeda_fb *kfb;
const struct drm_format_info *info;
int ret = 0, i;
@@ -150,37 +151,29 @@ komeda_fb_create(struct drm_device *dev, struct drm_file *file,
goto err_free;
}
+ ret = drm_gem_fb_lookup(dev, file, mode_cmd, objs);
+ if (ret < 0)
+ goto err_free;
+
drm_helper_mode_fill_fb_struct(dev, &kfb->base, mode_cmd);
info = kfb->base.format;
if (kfb->base.modifier) {
- struct drm_gem_object *objs[4];
-
if (info->num_planes != 1) {
DRM_DEBUG_KMS("AFBC requires exactly 1 plane.\n");
ret = -EINVAL;
- goto err_free;
+ goto err_cleanup;
}
- ret = drm_gem_fb_lookup(dev, file, mode_cmd, objs);
- if (ret < 0)
- goto err_free;
-
ret = komeda_fb_afbc_size_check(kfb, info, objs, file,
mode_cmd);
for (i = 0; i < info->num_planes; ++i)
kfb->base.obj[i] = objs[i];
} else {
- struct drm_gem_object *objs[4];
-
ret = komeda_fb_check_src_coords(kfb, 0, 0, kfb->base.width,
kfb->base.height);
if (ret)
- goto err_free;
-
- ret = drm_gem_fb_lookup(dev, file, mode_cmd, objs);
- if (ret < 0)
- goto err_free;
+ goto err_cleanup;
ret = komeda_fb_none_afbc_size_check(mdev, info, objs,
file, mode_cmd);
@@ -210,7 +203,7 @@ komeda_fb_create(struct drm_device *dev, struct drm_file *file,
err_cleanup:
for (i = 0; i < kfb->base.format->num_planes; i++)
- drm_gem_object_put_unlocked(kfb->base.obj[i]);
+ drm_gem_object_put_unlocked(objs[i]);
err_free:
kfree(kfb);
return ERR_PTR(ret);
The lookup is performed the same way in both branches of the "if" statement, so move the lookup to before the "if". err_cleanup case is adjusted accordingly. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> --- .../arm/display/komeda/komeda_framebuffer.c | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-)