|
@@ -161,12 +161,16 @@ i915_priotree_fini(struct drm_i915_private *i915, struct i915_priotree *pt)
|
|
|
|
|
|
GEM_BUG_ON(!list_empty(&pt->link));
|
|
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.
|
|
* should retire before us and remove themselves from our list.
|
|
* However, retirement is run independently on each timeline and
|
|
* However, retirement is run independently on each timeline and
|
|
* so we may be called out-of-order.
|
|
* so we may be called out-of-order.
|
|
*/
|
|
*/
|
|
list_for_each_entry_safe(dep, next, &pt->signalers_list, signal_link) {
|
|
list_for_each_entry_safe(dep, next, &pt->signalers_list, signal_link) {
|
|
|
|
+ GEM_BUG_ON(!i915_priotree_signaled(dep->signaler));
|
|
|
|
+ GEM_BUG_ON(!list_empty(&dep->dfs_link));
|
|
|
|
+
|
|
list_del(&dep->wait_link);
|
|
list_del(&dep->wait_link);
|
|
if (dep->flags & I915_DEPENDENCY_ALLOC)
|
|
if (dep->flags & I915_DEPENDENCY_ALLOC)
|
|
i915_dependency_free(i915, dep);
|
|
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 */
|
|
/* Remove ourselves from everyone who depends upon us */
|
|
list_for_each_entry_safe(dep, next, &pt->waiters_list, wait_link) {
|
|
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);
|
|
list_del(&dep->signal_link);
|
|
if (dep->flags & I915_DEPENDENCY_ALLOC)
|
|
if (dep->flags & I915_DEPENDENCY_ALLOC)
|
|
i915_dependency_free(i915, dep);
|
|
i915_dependency_free(i915, dep);
|