Commit 960dafa3 authored by Rob Clark's avatar Rob Clark Committed by Tvrtko Ursulin

drm/i915: Move fd_install after last use of fence

Because eb_composite_fence_create() drops the fence_array reference
after creation of the sync_file, only the sync_file holds a ref to the
fence.  But fd_install() makes that reference visable to userspace, so
it must be the last thing we do with the fence.
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
Fixes: 00dae4d3 ("drm/i915: Implement SINGLE_TIMELINE with a syncobj (v4)")
Cc: <stable@vger.kernel.org> # v5.15+
[tursulin: Added stable tag.]
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230203164937.4035503-1-robdclark@gmail.com
parent 01f0411f
...@@ -3486,6 +3486,13 @@ i915_gem_do_execbuffer(struct drm_device *dev, ...@@ -3486,6 +3486,13 @@ i915_gem_do_execbuffer(struct drm_device *dev,
eb.composite_fence : eb.composite_fence :
&eb.requests[0]->fence); &eb.requests[0]->fence);
if (unlikely(eb.gem_context->syncobj)) {
drm_syncobj_replace_fence(eb.gem_context->syncobj,
eb.composite_fence ?
eb.composite_fence :
&eb.requests[0]->fence);
}
if (out_fence) { if (out_fence) {
if (err == 0) { if (err == 0) {
fd_install(out_fence_fd, out_fence->file); fd_install(out_fence_fd, out_fence->file);
...@@ -3497,13 +3504,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, ...@@ -3497,13 +3504,6 @@ i915_gem_do_execbuffer(struct drm_device *dev,
} }
} }
if (unlikely(eb.gem_context->syncobj)) {
drm_syncobj_replace_fence(eb.gem_context->syncobj,
eb.composite_fence ?
eb.composite_fence :
&eb.requests[0]->fence);
}
if (!out_fence && eb.composite_fence) if (!out_fence && eb.composite_fence)
dma_fence_put(eb.composite_fence); dma_fence_put(eb.composite_fence);
......
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