drm/i915/execlists: Check the sentinel is alone in the ELSP
We only use sentinel requests for "preempt-to-idle" passes, so assert that they are the only request in a new submission. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200302085812.4172450-12-chris@chris-wilson.co.uk
This commit is contained in:
parent
4b4e973d5e
commit
15db5fcce9
@ -1448,6 +1448,7 @@ assert_pending_valid(const struct intel_engine_execlists *execlists,
|
||||
{
|
||||
struct i915_request * const *port, *rq;
|
||||
struct intel_context *ce = NULL;
|
||||
bool sentinel = false;
|
||||
|
||||
trace_ports(execlists, msg, execlists->pending);
|
||||
|
||||
@ -1481,6 +1482,26 @@ assert_pending_valid(const struct intel_engine_execlists *execlists,
|
||||
}
|
||||
ce = rq->context;
|
||||
|
||||
/*
|
||||
* Sentinels are supposed to be lonely so they flush the
|
||||
* current exection off the HW. Check that they are the
|
||||
* only request in the pending submission.
|
||||
*/
|
||||
if (sentinel) {
|
||||
GEM_TRACE_ERR("context:%llx after sentinel in pending[%zd]\n",
|
||||
ce->timeline->fence_context,
|
||||
port - execlists->pending);
|
||||
return false;
|
||||
}
|
||||
|
||||
sentinel = i915_request_has_sentinel(rq);
|
||||
if (sentinel && port != execlists->pending) {
|
||||
GEM_TRACE_ERR("sentinel context:%llx not in prime position[%zd]\n",
|
||||
ce->timeline->fence_context,
|
||||
port - execlists->pending);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Hold tightly onto the lock to prevent concurrent retires! */
|
||||
if (!spin_trylock_irqsave(&rq->lock, flags))
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user