Commit c836eb79 authored by Chris Wilson's avatar Chris Wilson

drm/i915/selftests: Always use an active engine while resetting

Currently, we only try to reset a live engine for checking the whitelist
retention across a per-engine reset. For safety, it appears we need to
prime the system with a hanging spinner before performing a full-device
reset. (Figuring out the root cause behind the instability with handling
a reset during a no-op request is a challenge for another test, the
whitelist test has its own purpose.)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109626Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190213224805.32021-1-chris@chris-wilson.co.ukReviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
parent 9a3b19a1
...@@ -237,14 +237,8 @@ switch_to_scratch_context(struct intel_engine_cs *engine, ...@@ -237,14 +237,8 @@ switch_to_scratch_context(struct intel_engine_cs *engine,
return PTR_ERR(ctx); return PTR_ERR(ctx);
rq = ERR_PTR(-ENODEV); rq = ERR_PTR(-ENODEV);
with_intel_runtime_pm(engine->i915, wakeref) { with_intel_runtime_pm(engine->i915, wakeref)
if (spin) rq = igt_spinner_create_request(spin, ctx, engine, MI_NOOP);
rq = igt_spinner_create_request(spin,
ctx, engine,
MI_NOOP);
else
rq = i915_request_alloc(engine, ctx);
}
kernel_context_close(ctx); kernel_context_close(ctx);
...@@ -273,7 +267,6 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine, ...@@ -273,7 +267,6 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
const char *name) const char *name)
{ {
struct drm_i915_private *i915 = engine->i915; struct drm_i915_private *i915 = engine->i915;
bool want_spin = reset == do_engine_reset;
struct i915_gem_context *ctx; struct i915_gem_context *ctx;
struct igt_spinner spin; struct igt_spinner spin;
intel_wakeref_t wakeref; intel_wakeref_t wakeref;
...@@ -282,11 +275,9 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine, ...@@ -282,11 +275,9 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
pr_info("Checking %d whitelisted registers (RING_NONPRIV) [%s]\n", pr_info("Checking %d whitelisted registers (RING_NONPRIV) [%s]\n",
engine->whitelist.count, name); engine->whitelist.count, name);
if (want_spin) { err = igt_spinner_init(&spin, i915);
err = igt_spinner_init(&spin, i915); if (err)
if (err) return err;
return err;
}
ctx = kernel_context(i915); ctx = kernel_context(i915);
if (IS_ERR(ctx)) if (IS_ERR(ctx))
...@@ -298,17 +289,15 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine, ...@@ -298,17 +289,15 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
goto out; goto out;
} }
err = switch_to_scratch_context(engine, want_spin ? &spin : NULL); err = switch_to_scratch_context(engine, &spin);
if (err) if (err)
goto out; goto out;
with_intel_runtime_pm(i915, wakeref) with_intel_runtime_pm(i915, wakeref)
err = reset(engine); err = reset(engine);
if (want_spin) { igt_spinner_end(&spin);
igt_spinner_end(&spin); igt_spinner_fini(&spin);
igt_spinner_fini(&spin);
}
if (err) { if (err) {
pr_err("%s reset failed\n", name); pr_err("%s reset failed\n", name);
......
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