]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Most error cases in i915_gem_do_execbuffer() jump to one of two labels to
authorjhb <jhb@FreeBSD.org>
Thu, 1 Oct 2015 16:59:07 +0000 (16:59 +0000)
committerjhb <jhb@FreeBSD.org>
Thu, 1 Oct 2015 16:59:07 +0000 (16:59 +0000)
release resources (such as unholding pages) when errors occur.  Some
recently added error checks return immediately instead of jumping to a
label resulting in leaks.  Fix these to jump to a label to do cleanup
instead.

Reviewed by: kib
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D3745

sys/dev/drm2/i915/i915_gem_execbuffer.c

index a852338c9ec6ccffcca47c5913416529e5e9a622..088043d1a5c8a5c95ef87003351977c437649452 100644 (file)
@@ -1151,7 +1151,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
                if (ctx_id != 0) {
                        DRM_DEBUG("Ring %s doesn't support contexts\n",
                                  ring->name);
-                       return -EPERM;
+                       ret = -EPERM;
+                       goto pre_struct_lock_err;
                }
                break;
        case I915_EXEC_BLT:
@@ -1159,7 +1160,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
                if (ctx_id != 0) {
                        DRM_DEBUG("Ring %s doesn't support contexts\n",
                                  ring->name);
-                       return -EPERM;
+                       ret = -EPERM;
+                       goto pre_struct_lock_err;
                }
                break;
        default:
@@ -1171,7 +1173,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
        if (!intel_ring_initialized(ring)) {
                DRM_DEBUG("execbuf with invalid ring: %d\n",
                          (int)(args->flags & I915_EXEC_RING_MASK));
-               return -EINVAL;
+               ret = -EINVAL;
+               goto pre_struct_lock_err;
        }
 
        mode = args->flags & I915_EXEC_CONSTANTS_MASK;