diff mbox

drm/i915: Assert that the request is on the execution queue before being removed

Message ID 20171222141959.3006-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson Dec. 22, 2017, 2:19 p.m. UTC
We should only attempt to remove requests from the execution queue that
are on the execution queue. These are the requests that have been
assigned a global_seqno, so we can assert that we only attempt to remove
requests with a nonzero global_seqno. Afterwards we assert that we
remove them in order, i.e. the global_seqno matches the engine's seqno,
but that leaves a small loophole for an unattached request on an unused
engine.

We can then make the same assertion on queuing the request to the
execution, it must have a zero global_seqno or else we are queuing the
same request twice.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
---
 drivers/gpu/drm/i915/i915_gem_request.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Tvrtko Ursulin Dec. 22, 2017, 5:18 p.m. UTC | #1
On 22/12/2017 14:19, Chris Wilson wrote:
> We should only attempt to remove requests from the execution queue that
> are on the execution queue. These are the requests that have been
> assigned a global_seqno, so we can assert that we only attempt to remove
> requests with a nonzero global_seqno. Afterwards we assert that we
> remove them in order, i.e. the global_seqno matches the engine's seqno,
> but that leaves a small loophole for an unattached request on an unused
> engine.
> 
> We can then make the same assertion on queuing the request to the
> execution, it must have a zero global_seqno or else we are queuing the
> same request twice.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: Michał Winiarski <michal.winiarski@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_gem_request.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
> index 59f023bb7015..d575109f7a7f 100644
> --- a/drivers/gpu/drm/i915/i915_gem_request.c
> +++ b/drivers/gpu/drm/i915/i915_gem_request.c
> @@ -479,6 +479,7 @@ void __i915_gem_request_submit(struct drm_i915_gem_request *request)
>   	/* Transfer from per-context onto the global per-engine timeline */
>   	timeline = engine->timeline;
>   	GEM_BUG_ON(timeline == request->timeline);
> +	GEM_BUG_ON(request->global_seqno);
>   
>   	seqno = timeline_get_seqno(timeline);
>   	GEM_BUG_ON(!seqno);
> @@ -525,6 +526,7 @@ void __i915_gem_request_unsubmit(struct drm_i915_gem_request *request)
>   	/* Only unwind in reverse order, required so that the per-context list
>   	 * is kept in seqno/ring order.
>   	 */
> +	GEM_BUG_ON(!request->global_seqno);
>   	GEM_BUG_ON(request->global_seqno != engine->timeline->seqno);
>   	engine->timeline->seqno--;
>   
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
index 59f023bb7015..d575109f7a7f 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -479,6 +479,7 @@  void __i915_gem_request_submit(struct drm_i915_gem_request *request)
 	/* Transfer from per-context onto the global per-engine timeline */
 	timeline = engine->timeline;
 	GEM_BUG_ON(timeline == request->timeline);
+	GEM_BUG_ON(request->global_seqno);
 
 	seqno = timeline_get_seqno(timeline);
 	GEM_BUG_ON(!seqno);
@@ -525,6 +526,7 @@  void __i915_gem_request_unsubmit(struct drm_i915_gem_request *request)
 	/* Only unwind in reverse order, required so that the per-context list
 	 * is kept in seqno/ring order.
 	 */
+	GEM_BUG_ON(!request->global_seqno);
 	GEM_BUG_ON(request->global_seqno != engine->timeline->seqno);
 	engine->timeline->seqno--;