Commit e14177f1 authored by Chris Wilson's avatar Chris Wilson

drm/i915/gem: Keep request alive while attaching fences

Since commit e5dadff4 ("drm/i915: Protect request retirement with
timeline->mutex"), the request retirement can happen outside of the
struct_mutex serialised only by the timeline->mutex. We drop the
timeline->mutex on submitting the request (i915_request_add) so after
that point, it is liable to be freed. Make sure our local reference is
kept alive until we have finished attaching it to the signalers. (Note
that this erodes the argument that i915_request_add should consume the
reference, but that is a slightly larger patch!)

Fixes: e5dadff4 ("drm/i915: Protect request retirement with timeline->mutex")
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191217134729.3297818-1-chris@chris-wilson.co.uk
parent b6941311
...@@ -2730,6 +2730,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, ...@@ -2730,6 +2730,7 @@ i915_gem_do_execbuffer(struct drm_device *dev,
err = eb_submit(&eb); err = eb_submit(&eb);
err_request: err_request:
add_to_client(eb.request, file); add_to_client(eb.request, file);
i915_request_get(eb.request);
i915_request_add(eb.request); i915_request_add(eb.request);
if (fences) if (fences)
...@@ -2745,6 +2746,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, ...@@ -2745,6 +2746,7 @@ i915_gem_do_execbuffer(struct drm_device *dev,
fput(out_fence->file); fput(out_fence->file);
} }
} }
i915_request_put(eb.request);
err_batch_unpin: err_batch_unpin:
if (eb.batch_flags & I915_DISPATCH_SECURE) if (eb.batch_flags & I915_DISPATCH_SECURE)
......
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