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,
return PTR_ERR(ctx);
rq = ERR_PTR(-ENODEV);
with_intel_runtime_pm(engine->i915, wakeref) {
if (spin)
rq = igt_spinner_create_request(spin,
ctx, engine,
MI_NOOP);
else
rq = i915_request_alloc(engine, ctx);
}
with_intel_runtime_pm(engine->i915, wakeref)
rq = igt_spinner_create_request(spin, ctx, engine, MI_NOOP);
kernel_context_close(ctx);
......@@ -273,7 +267,6 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
const char *name)
{
struct drm_i915_private *i915 = engine->i915;
bool want_spin = reset == do_engine_reset;
struct i915_gem_context *ctx;
struct igt_spinner spin;
intel_wakeref_t wakeref;
......@@ -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",
engine->whitelist.count, name);
if (want_spin) {
err = igt_spinner_init(&spin, i915);
if (err)
return err;
}
err = igt_spinner_init(&spin, i915);
if (err)
return err;
ctx = kernel_context(i915);
if (IS_ERR(ctx))
......@@ -298,17 +289,15 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
goto out;
}
err = switch_to_scratch_context(engine, want_spin ? &spin : NULL);
err = switch_to_scratch_context(engine, &spin);
if (err)
goto out;
with_intel_runtime_pm(i915, wakeref)
err = reset(engine);
if (want_spin) {
igt_spinner_end(&spin);
igt_spinner_fini(&spin);
}
igt_spinner_end(&spin);
igt_spinner_fini(&spin);
if (err) {
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