drm/i915: Do not record a successful syncpoint for a dma-await
As we may unwind the requests, even though the request we are awaiting has a global_seqno that seqno may be revoked during the await and so we can not reliably use it as a barrier for all future awaits on the same timeline. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Michał Winiarski <michal.winiarski@intel.com> Reviewed-by: Michał Winiarski <michal.winiarski@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170503093924.5320-6-chris@chris-wilson.co.uk
This commit is contained in:
parent
7e8894e97d
commit
fc9d4d2b6f
@ -708,33 +708,34 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
|
||||
}
|
||||
|
||||
seqno = i915_gem_request_global_seqno(from);
|
||||
if (!seqno) {
|
||||
ret = i915_sw_fence_await_dma_fence(&to->submit,
|
||||
&from->fence, 0,
|
||||
GFP_KERNEL);
|
||||
return ret < 0 ? ret : 0;
|
||||
}
|
||||
if (!seqno)
|
||||
goto await_dma_fence;
|
||||
|
||||
if (seqno <= to->timeline->global_sync[from->engine->id])
|
||||
return 0;
|
||||
|
||||
trace_i915_gem_ring_sync_to(to, from);
|
||||
if (!i915.semaphores) {
|
||||
if (!i915_spin_request(from, TASK_INTERRUPTIBLE, 2)) {
|
||||
ret = i915_sw_fence_await_dma_fence(&to->submit,
|
||||
&from->fence, 0,
|
||||
GFP_KERNEL);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
if (!__i915_gem_request_started(from, seqno))
|
||||
goto await_dma_fence;
|
||||
|
||||
if (!__i915_spin_request(from, seqno, TASK_INTERRUPTIBLE, 2))
|
||||
goto await_dma_fence;
|
||||
} else {
|
||||
if (seqno <= to->timeline->global_sync[from->engine->id])
|
||||
return 0;
|
||||
|
||||
trace_i915_gem_ring_sync_to(to, from);
|
||||
ret = to->engine->semaphore.sync_to(to, from);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
to->timeline->global_sync[from->engine->id] = seqno;
|
||||
}
|
||||
|
||||
to->timeline->global_sync[from->engine->id] = seqno;
|
||||
return 0;
|
||||
|
||||
await_dma_fence:
|
||||
ret = i915_sw_fence_await_dma_fence(&to->submit,
|
||||
&from->fence, 0,
|
||||
GFP_KERNEL);
|
||||
return ret < 0 ? ret : 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
Loading…
Reference in New Issue
Block a user