Commit 0ade4390 authored by Chris Wilson's avatar Chris Wilson

drm/i915/selftests: Include the trace as a debug aide

If we fail to reset the GPU in a timely fashion, dump the GEM trace so
that we can see what operations were in flight when the GPU got stuck.

v2: There's more than one timeout that deserves tracing!
v3: Silence checkpatch by not even using a product at all!
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: default avatarJeff McGee <jeff.mcgee@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180322074908.10838-1-chris@chris-wilson.co.uk
parent 4ccfee92
...@@ -260,8 +260,11 @@ static void wedge_me(struct work_struct *work) ...@@ -260,8 +260,11 @@ static void wedge_me(struct work_struct *work)
{ {
struct wedge_me *w = container_of(work, typeof(*w), work.work); struct wedge_me *w = container_of(work, typeof(*w), work.work);
pr_err("%pS timed out, cancelling all further testing.\n", pr_err("%pS timed out, cancelling all further testing.\n", w->symbol);
w->symbol);
GEM_TRACE("%pS timed out.\n", w->symbol);
GEM_TRACE_DUMP();
i915_gem_set_wedged(w->i915); i915_gem_set_wedged(w->i915);
} }
...@@ -621,9 +624,19 @@ static int active_engine(void *data) ...@@ -621,9 +624,19 @@ static int active_engine(void *data)
mutex_unlock(&engine->i915->drm.struct_mutex); mutex_unlock(&engine->i915->drm.struct_mutex);
if (old) { if (old) {
i915_request_wait(old, 0, MAX_SCHEDULE_TIMEOUT); if (i915_request_wait(old, 0, HZ) < 0) {
GEM_TRACE("%s timed out.\n", engine->name);
GEM_TRACE_DUMP();
i915_gem_set_wedged(engine->i915);
i915_request_put(old);
err = -EIO;
break;
}
i915_request_put(old); i915_request_put(old);
} }
cond_resched();
} }
for (count = 0; count < ARRAY_SIZE(rq); count++) for (count = 0; count < ARRAY_SIZE(rq); count++)
...@@ -1126,6 +1139,10 @@ int intel_hangcheck_live_selftests(struct drm_i915_private *i915) ...@@ -1126,6 +1139,10 @@ int intel_hangcheck_live_selftests(struct drm_i915_private *i915)
err = i915_subtests(tests, i915); err = i915_subtests(tests, i915);
mutex_lock(&i915->drm.struct_mutex);
flush_test(i915, I915_WAIT_LOCKED);
mutex_unlock(&i915->drm.struct_mutex);
i915_modparams.enable_hangcheck = saved_hangcheck; i915_modparams.enable_hangcheck = saved_hangcheck;
intel_runtime_pm_put(i915); intel_runtime_pm_put(i915);
......
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