Commit 15db5fcc authored by Chris Wilson's avatar Chris Wilson

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: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200302085812.4172450-12-chris@chris-wilson.co.uk
parent 4b4e973d
...@@ -1448,6 +1448,7 @@ assert_pending_valid(const struct intel_engine_execlists *execlists, ...@@ -1448,6 +1448,7 @@ assert_pending_valid(const struct intel_engine_execlists *execlists,
{ {
struct i915_request * const *port, *rq; struct i915_request * const *port, *rq;
struct intel_context *ce = NULL; struct intel_context *ce = NULL;
bool sentinel = false;
trace_ports(execlists, msg, execlists->pending); trace_ports(execlists, msg, execlists->pending);
...@@ -1481,6 +1482,26 @@ assert_pending_valid(const struct intel_engine_execlists *execlists, ...@@ -1481,6 +1482,26 @@ assert_pending_valid(const struct intel_engine_execlists *execlists,
} }
ce = rq->context; 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! */ /* Hold tightly onto the lock to prevent concurrent retires! */
if (!spin_trylock_irqsave(&rq->lock, flags)) if (!spin_trylock_irqsave(&rq->lock, flags))
continue; continue;
......
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