Commit 052e04f1 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Joonas Lahtinen

drm/i915/selftests: Fix locking inversion in lrc selftest.

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: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200819140904.1708856-20-maarten.lankhorst@linux.intel.comSigned-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
parent dd878c0c
...@@ -4996,6 +4996,7 @@ static int __live_lrc_state(struct intel_engine_cs *engine, ...@@ -4996,6 +4996,7 @@ static int __live_lrc_state(struct intel_engine_cs *engine,
{ {
struct intel_context *ce; struct intel_context *ce;
struct i915_request *rq; struct i915_request *rq;
struct i915_gem_ww_ctx ww;
enum { enum {
RING_START_IDX = 0, RING_START_IDX = 0,
RING_TAIL_IDX, RING_TAIL_IDX,
...@@ -5010,7 +5011,11 @@ static int __live_lrc_state(struct intel_engine_cs *engine, ...@@ -5010,7 +5011,11 @@ static int __live_lrc_state(struct intel_engine_cs *engine,
if (IS_ERR(ce)) if (IS_ERR(ce))
return PTR_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) if (err)
goto err_put; goto err_put;
...@@ -5039,11 +5044,9 @@ static int __live_lrc_state(struct intel_engine_cs *engine, ...@@ -5039,11 +5044,9 @@ static int __live_lrc_state(struct intel_engine_cs *engine,
*cs++ = i915_ggtt_offset(scratch) + RING_TAIL_IDX * sizeof(u32); *cs++ = i915_ggtt_offset(scratch) + RING_TAIL_IDX * sizeof(u32);
*cs++ = 0; *cs++ = 0;
i915_vma_lock(scratch);
err = i915_request_await_object(rq, scratch->obj, true); err = i915_request_await_object(rq, scratch->obj, true);
if (!err) if (!err)
err = i915_vma_move_to_active(scratch, rq, EXEC_OBJECT_WRITE); err = i915_vma_move_to_active(scratch, rq, EXEC_OBJECT_WRITE);
i915_vma_unlock(scratch);
i915_request_get(rq); i915_request_get(rq);
i915_request_add(rq); i915_request_add(rq);
...@@ -5080,6 +5083,12 @@ static int __live_lrc_state(struct intel_engine_cs *engine, ...@@ -5080,6 +5083,12 @@ static int __live_lrc_state(struct intel_engine_cs *engine,
err_unpin: err_unpin:
intel_context_unpin(ce); intel_context_unpin(ce);
err_put: 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); intel_context_put(ce);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment