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=109626 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190213224805.32021-1-chris@chris-wilson.co.uk Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
This commit is contained in:
parent
9a3b19a16d
commit
c836eb79c0
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user