Most error cases in i915_gem_do_execbuffer() jump to one of two labels to

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
This commit is contained in:
John Baldwin 2015-10-01 16:59:07 +00:00
parent 0a19cfd454
commit 2ad026889e

View 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;