mirror of https://gitee.com/openkylin/linux.git
drm/i915: Confirm request->global_seqno after spin completion
After we see our target seqno has been completed by the hw, we need to confirm that it still matches the request (as it may have been preempted before the spin completes). If the request no longer matches the target seqno, we need to restart the wait to reacquire that seqno. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Michal Winiarski <michal.winiarski@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20170921210903.18337-1-chris@chris-wilson.co.uk Reviewed-by: Michał Winiarski <michal.winiarski@intel.com>
This commit is contained in:
parent
de4d2106f8
commit
a3df2c857c
|
@ -1040,12 +1040,9 @@ bool __i915_spin_request(const struct drm_i915_gem_request *req,
|
||||||
irq = atomic_read(&engine->irq_count);
|
irq = atomic_read(&engine->irq_count);
|
||||||
timeout_us += local_clock_us(&cpu);
|
timeout_us += local_clock_us(&cpu);
|
||||||
do {
|
do {
|
||||||
if (seqno != i915_gem_request_global_seqno(req))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (i915_seqno_passed(intel_engine_get_seqno(req->engine),
|
if (i915_seqno_passed(intel_engine_get_seqno(req->engine),
|
||||||
seqno))
|
seqno))
|
||||||
return true;
|
return seqno == i915_gem_request_global_seqno(req);
|
||||||
|
|
||||||
/* Seqno are meant to be ordered *before* the interrupt. If
|
/* Seqno are meant to be ordered *before* the interrupt. If
|
||||||
* we see an interrupt without a corresponding seqno advance,
|
* we see an interrupt without a corresponding seqno advance,
|
||||||
|
|
Loading…
Reference in New Issue