This function does not use intel_context_create_request, so it has
to use the same locking order as normal code. This is required to
shut up lockdep in selftests.

Signed-off-by: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
---
 drivers/gpu/drm/i915/gt/selftest_lrc.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c 
b/drivers/gpu/drm/i915/gt/selftest_lrc.c
index 30e55b451569..86ec46e60989 100644
--- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
@@ -4632,6 +4632,7 @@ static int __live_lrc_state(struct intel_engine_cs 
*engine,
 {
        struct intel_context *ce;
        struct i915_request *rq;
+       struct i915_gem_ww_ctx ww;
        enum {
                RING_START_IDX = 0,
                RING_TAIL_IDX,
@@ -4646,7 +4647,11 @@ static int __live_lrc_state(struct intel_engine_cs 
*engine,
        if (IS_ERR(ce))
                return PTR_ERR(ce);
 
-       err = intel_context_pin(ce);
+       i915_gem_ww_ctx_init(&ww, false);
+retry:
+       err = i915_gem_object_lock(scratch->obj, &ww);
+       if (!err)
+               err = intel_context_pin_ww(ce, &ww);
        if (err)
                goto err_put;
 
@@ -4675,11 +4680,9 @@ static int __live_lrc_state(struct intel_engine_cs 
*engine,
        *cs++ = i915_ggtt_offset(scratch) + RING_TAIL_IDX * sizeof(u32);
        *cs++ = 0;
 
-       i915_vma_lock(scratch);
        err = i915_request_await_object(rq, scratch->obj, true);
        if (!err)
                err = i915_vma_move_to_active(scratch, rq, EXEC_OBJECT_WRITE);
-       i915_vma_unlock(scratch);
 
        i915_request_get(rq);
        i915_request_add(rq);
@@ -4716,6 +4719,12 @@ static int __live_lrc_state(struct intel_engine_cs 
*engine,
 err_unpin:
        intel_context_unpin(ce);
 err_put:
+       if (err == -EDEADLK) {
+               err = i915_gem_ww_ctx_backoff(&ww);
+               if (!err)
+                       goto retry;
+       }
+       i915_gem_ww_ctx_fini(&ww);
        intel_context_put(ce);
        return err;
 }
-- 
2.26.2

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

Reply via email to