|
@@ -213,6 +213,24 @@ static void print_error_buffers(struct drm_i915_error_state_buf *m,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static const char *hangcheck_action_to_str(enum intel_ring_hangcheck_action a)
|
|
|
+{
|
|
|
+ switch (a) {
|
|
|
+ case HANGCHECK_IDLE:
|
|
|
+ return "idle";
|
|
|
+ case HANGCHECK_WAIT:
|
|
|
+ return "wait";
|
|
|
+ case HANGCHECK_ACTIVE:
|
|
|
+ return "active";
|
|
|
+ case HANGCHECK_KICK:
|
|
|
+ return "kick";
|
|
|
+ case HANGCHECK_HUNG:
|
|
|
+ return "hung";
|
|
|
+ }
|
|
|
+
|
|
|
+ return "unknown";
|
|
|
+}
|
|
|
+
|
|
|
static void i915_ring_error_state(struct drm_i915_error_state_buf *m,
|
|
|
struct drm_device *dev,
|
|
|
struct drm_i915_error_state *error,
|
|
@@ -253,6 +271,9 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m,
|
|
|
err_printf(m, " waiting: %s\n", yesno(error->waiting[ring]));
|
|
|
err_printf(m, " ring->head: 0x%08x\n", error->cpu_ring_head[ring]);
|
|
|
err_printf(m, " ring->tail: 0x%08x\n", error->cpu_ring_tail[ring]);
|
|
|
+ err_printf(m, " hangcheck: %s [%d]\n",
|
|
|
+ hangcheck_action_to_str(error->hangcheck_action[ring]),
|
|
|
+ error->hangcheck_score[ring]);
|
|
|
}
|
|
|
|
|
|
void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...)
|
|
@@ -718,6 +739,9 @@ static void i915_record_ring_state(struct drm_device *dev,
|
|
|
|
|
|
error->cpu_ring_head[ring->id] = ring->head;
|
|
|
error->cpu_ring_tail[ring->id] = ring->tail;
|
|
|
+
|
|
|
+ error->hangcheck_score[ring->id] = ring->hangcheck.score;
|
|
|
+ error->hangcheck_action[ring->id] = ring->hangcheck.action;
|
|
|
}
|
|
|
|
|
|
|