drm/etnaviv: Optimize error handling in etnaviv_gem_new_userptr()
authorMarkus Elfring <elfring@users.sourceforge.net>
Fri, 22 Jul 2016 15:17:48 +0000 (17:17 +0200)
committerSean Paul <seanpaul@chromium.org>
Fri, 22 Jul 2016 17:51:49 +0000 (13:51 -0400)
Refactor this function implementation so that the
drm_gem_object_unreference_unlocked() function will only be called once
in case of a failure according to the Linux coding style recommendation
for centralized exiting of functions.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
[seanpaul tweaked subject]
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: http://patchwork.freedesktop.org/patch/msgid/4af34ce6-62c6-7966-1ae3-0877d5ac909d@users.sourceforge.net
drivers/gpu/drm/etnaviv/etnaviv_gem.c

index 356056ab63d7f10aef0de6c6f48ed9834ef49e43..56fb8637bb57ece37a880d7f8bb04231d0c67a0c 100644 (file)
@@ -913,15 +913,12 @@ int etnaviv_gem_new_userptr(struct drm_device *dev, struct drm_file *file,
        get_task_struct(current);
 
        ret = etnaviv_gem_obj_add(dev, &etnaviv_obj->base);
-       if (ret) {
-               drm_gem_object_unreference_unlocked(&etnaviv_obj->base);
-               return ret;
-       }
+       if (ret)
+               goto unreference;
 
        ret = drm_gem_handle_create(file, &etnaviv_obj->base, handle);
-
+unreference:
        /* drop reference from allocate - handle holds it now */
        drm_gem_object_unreference_unlocked(&etnaviv_obj->base);
-
        return ret;
 }