[PATCH 18/25] drm/i915: Only wait in i915_active_wait, not retire

Chris Wilson chris at chris-wilson.co.uk
Fri Jun 7 08:56:49 UTC 2019


Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_active.c           | 20 +++++++++++++++++++-
 drivers/gpu/drm/i915/selftests/i915_active.c |  4 ++--
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c
index d11f82dcab14..99f047ffff6d 100644
--- a/drivers/gpu/drm/i915/i915_active.c
+++ b/drivers/gpu/drm/i915/i915_active.c
@@ -186,6 +186,24 @@ void i915_active_release(struct i915_active *ref)
 	__active_retire(ref);
 }
 
+static inline int
+i915_active_request_wait(struct i915_active_request *active)
+{
+	struct i915_request *rq;
+	long ret;
+
+	rq = i915_active_request_get_unlocked(active);
+	if (!rq)
+		return 0;
+
+	ret = i915_request_wait(rq,
+				I915_WAIT_INTERRUPTIBLE,
+				MAX_SCHEDULE_TIMEOUT);
+	i915_request_put(rq);
+
+	return ret < 0 ? ret : 0;
+}
+
 int i915_active_wait(struct i915_active *ref)
 {
 	struct active_node *it, *n;
@@ -203,7 +221,7 @@ int i915_active_wait(struct i915_active *ref)
 		goto out;
 
 	rbtree_postorder_for_each_entry_safe(it, n, &ref->tree, node) {
-		err = i915_active_request_retire(&it->base, BKL(ref));
+		err = i915_active_request_wait(&it->base);
 		if (err)
 			break;
 	}
diff --git a/drivers/gpu/drm/i915/selftests/i915_active.c b/drivers/gpu/drm/i915/selftests/i915_active.c
index 3b3ca5658122..c5c9b794b195 100644
--- a/drivers/gpu/drm/i915/selftests/i915_active.c
+++ b/drivers/gpu/drm/i915/selftests/i915_active.c
@@ -100,8 +100,8 @@ static int live_active_wait(void *arg)
 	err = __live_active_setup(i915, &active);
 
 	i915_active_wait(&active.base);
-	if (!active.retired) {
-		pr_err("i915_active not retired after waiting!\n");
+	if (active.retired) {
+		pr_err("i915_active retired after just waiting!\n");
 		err = -EINVAL;
 	}
 
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list