Commit ceae14bd authored by Chris Wilson's avatar Chris Wilson

drm/i915: Lift timeline ordering to await_dma_fence

Currently we filter out repeated use of the same timeline in the low
level i915_gem_request_await_request(), after having added the
dependency on the old request. However, we can lift this to
i915_gem_request_await_dma_fence() (before the dependency is added)
using the observation that requests along the same timeline are
explicitly ordered via i915_add_request (along with the dependencies).
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170503093924.5320-3-chris@chris-wilson.co.uk
parent 29ef3fa9
...@@ -687,6 +687,7 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to, ...@@ -687,6 +687,7 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
int ret; int ret;
GEM_BUG_ON(to == from); GEM_BUG_ON(to == from);
GEM_BUG_ON(to->timeline == from->timeline);
if (i915_gem_request_completed(from)) if (i915_gem_request_completed(from))
return 0; return 0;
...@@ -699,9 +700,6 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to, ...@@ -699,9 +700,6 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
return ret; return ret;
} }
if (to->timeline == from->timeline)
return 0;
if (to->engine == from->engine) { if (to->engine == from->engine) {
ret = i915_sw_fence_await_sw_fence_gfp(&to->submit, ret = i915_sw_fence_await_sw_fence_gfp(&to->submit,
&from->submit, &from->submit,
...@@ -767,6 +765,14 @@ i915_gem_request_await_dma_fence(struct drm_i915_gem_request *req, ...@@ -767,6 +765,14 @@ i915_gem_request_await_dma_fence(struct drm_i915_gem_request *req,
if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
continue; continue;
/*
* Requests on the same timeline are explicitly ordered, along
* with their dependencies, by i915_add_request() which ensures
* that requests are submitted in-order through each ring.
*/
if (fence->context == req->fence.context)
continue;
if (dma_fence_is_i915(fence)) if (dma_fence_is_i915(fence))
ret = i915_gem_request_await_request(req, ret = i915_gem_request_await_request(req,
to_request(fence)); to_request(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