Commit 4a04e371 authored by Daniele Ceraolo Spurio's avatar Daniele Ceraolo Spurio Committed by Chris Wilson

drm/i915: fix pm refcounting on fence error in execbuf

Fences are creted/checked before the pm ref is taken, so if we jump to
pre_mutex_err we will uncorrectly call intel_runtime_pm_put.

v2: Massage unwind error paths

Fixes: fec0445c (drm/i915: Support explicit fencing for execbuf)
Testcase: igt/gem_exec_params
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1486161930-11764-1-git-send-email-daniele.ceraolospurio@intel.comReviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 955b8e9c
...@@ -1644,18 +1644,15 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, ...@@ -1644,18 +1644,15 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
if (args->flags & I915_EXEC_FENCE_IN) { if (args->flags & I915_EXEC_FENCE_IN) {
in_fence = sync_file_get_fence(lower_32_bits(args->rsvd2)); in_fence = sync_file_get_fence(lower_32_bits(args->rsvd2));
if (!in_fence) { if (!in_fence)
ret = -EINVAL; return -EINVAL;
goto pre_mutex_err;
}
} }
if (args->flags & I915_EXEC_FENCE_OUT) { if (args->flags & I915_EXEC_FENCE_OUT) {
out_fence_fd = get_unused_fd_flags(O_CLOEXEC); out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
if (out_fence_fd < 0) { if (out_fence_fd < 0) {
ret = out_fence_fd; ret = out_fence_fd;
out_fence_fd = -1; goto err_in_fence;
goto pre_mutex_err;
} }
} }
...@@ -1878,6 +1875,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, ...@@ -1878,6 +1875,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
intel_runtime_pm_put(dev_priv); intel_runtime_pm_put(dev_priv);
if (out_fence_fd != -1) if (out_fence_fd != -1)
put_unused_fd(out_fence_fd); put_unused_fd(out_fence_fd);
err_in_fence:
dma_fence_put(in_fence); dma_fence_put(in_fence);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment