[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