Back up our comment that all signalers should have been signaled before
we ourselves were retired with an assert to that effect.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahti...@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_gem_request.c | 9 ++++++++-
 drivers/gpu/drm/i915/i915_gem_request.h | 6 ++++++
 drivers/gpu/drm/i915/intel_lrc.c        | 9 ++-------
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_request.c 
b/drivers/gpu/drm/i915/i915_gem_request.c
index b5213a926ced..a24c6a87953c 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -161,12 +161,16 @@ i915_priotree_fini(struct drm_i915_private *i915, struct 
i915_priotree *pt)
 
        GEM_BUG_ON(!list_empty(&pt->link));
 
-       /* Everyone we depended upon (the fences we wait to be signaled)
+       /*
+        * Everyone we depended upon (the fences we wait to be signaled)
         * should retire before us and remove themselves from our list.
         * However, retirement is run independently on each timeline and
         * so we may be called out-of-order.
         */
        list_for_each_entry_safe(dep, next, &pt->signalers_list, signal_link) {
+               
GEM_BUG_ON(!i915_gem_request_completed(priotree_to_request(dep->signaler)));
+               GEM_BUG_ON(!list_empty(&dep->dfs_link));
+
                list_del(&dep->wait_link);
                if (dep->flags & I915_DEPENDENCY_ALLOC)
                        i915_dependency_free(i915, dep);
@@ -174,6 +178,9 @@ i915_priotree_fini(struct drm_i915_private *i915, struct 
i915_priotree *pt)
 
        /* Remove ourselves from everyone who depends upon us */
        list_for_each_entry_safe(dep, next, &pt->waiters_list, wait_link) {
+               GEM_BUG_ON(dep->signaler != pt);
+               GEM_BUG_ON(!list_empty(&dep->dfs_link));
+
                list_del(&dep->signal_link);
                if (dep->flags & I915_DEPENDENCY_ALLOC)
                        i915_dependency_free(i915, dep);
diff --git a/drivers/gpu/drm/i915/i915_gem_request.h 
b/drivers/gpu/drm/i915/i915_gem_request.h
index 04ee289d6cab..5753ab3aaff5 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.h
+++ b/drivers/gpu/drm/i915/i915_gem_request.h
@@ -227,6 +227,12 @@ to_request(struct dma_fence *fence)
        return container_of(fence, struct drm_i915_gem_request, fence);
 }
 
+static inline struct drm_i915_gem_request *
+priotree_to_request(struct i915_priotree *pt)
+{
+       return container_of(pt, struct drm_i915_gem_request, priotree);
+}
+
 static inline struct drm_i915_gem_request *
 i915_gem_request_get(struct drm_i915_gem_request *req)
 {
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 739c33b07c59..007aec9d95c9 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -973,15 +973,10 @@ static void execlists_submit_request(struct 
drm_i915_gem_request *request)
        spin_unlock_irqrestore(&engine->timeline->lock, flags);
 }
 
-static struct drm_i915_gem_request *pt_to_request(struct i915_priotree *pt)
-{
-       return container_of(pt, struct drm_i915_gem_request, priotree);
-}
-
 static struct intel_engine_cs *
 pt_lock_engine(struct i915_priotree *pt, struct intel_engine_cs *locked)
 {
-       struct intel_engine_cs *engine = pt_to_request(pt)->engine;
+       struct intel_engine_cs *engine = priotree_to_request(pt)->engine;
 
        GEM_BUG_ON(!locked);
 
@@ -1037,7 +1032,7 @@ static void execlists_schedule(struct 
drm_i915_gem_request *request, int prio)
                 * engines.
                 */
                list_for_each_entry(p, &pt->signalers_list, signal_link) {
-                       if 
(i915_gem_request_completed(pt_to_request(p->signaler)))
+                       if 
(i915_gem_request_completed(priotree_to_request(p->signaler)))
                                continue;
 
                        GEM_BUG_ON(p->signaler->priority < pt->priority);
-- 
2.15.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to