Commit 14fd0d6d authored by Chris Wilson's avatar Chris Wilson

drm/i915: Include engine->last_submitted_seqno in GPU error state

It's useful to look at the last seqno submitted on a particular engine
and compare it against the HWS value to check for irregularities.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1460010558-10705-1-git-send-email-chris@chris-wilson.co.uk
parent 6f0e7535
...@@ -1363,8 +1363,10 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused) ...@@ -1363,8 +1363,10 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
for_each_engine_id(engine, dev_priv, id) { for_each_engine_id(engine, dev_priv, id) {
seq_printf(m, "%s:\n", engine->name); seq_printf(m, "%s:\n", engine->name);
seq_printf(m, "\tseqno = %x [current %x]\n", seq_printf(m, "\tseqno = %x [current %x, last %x]\n",
engine->hangcheck.seqno, seqno[id]); engine->hangcheck.seqno,
seqno[id],
engine->last_submitted_seqno);
seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n", seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n",
(long long)engine->hangcheck.acthd, (long long)engine->hangcheck.acthd,
(long long)acthd[id]); (long long)acthd[id]);
......
...@@ -495,6 +495,7 @@ struct drm_i915_error_state { ...@@ -495,6 +495,7 @@ struct drm_i915_error_state {
u32 cpu_ring_head; u32 cpu_ring_head;
u32 cpu_ring_tail; u32 cpu_ring_tail;
u32 last_seqno;
u32 semaphore_seqno[I915_NUM_ENGINES - 1]; u32 semaphore_seqno[I915_NUM_ENGINES - 1];
/* Register state */ /* Register state */
......
...@@ -296,6 +296,7 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, ...@@ -296,6 +296,7 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m,
} }
} }
err_printf(m, " seqno: 0x%08x\n", ring->seqno); err_printf(m, " seqno: 0x%08x\n", ring->seqno);
err_printf(m, " last_seqno: 0x%08x\n", ring->last_seqno);
err_printf(m, " waiting: %s\n", yesno(ring->waiting)); err_printf(m, " waiting: %s\n", yesno(ring->waiting));
err_printf(m, " ring->head: 0x%08x\n", ring->cpu_ring_head); err_printf(m, " ring->head: 0x%08x\n", ring->cpu_ring_head);
err_printf(m, " ring->tail: 0x%08x\n", ring->cpu_ring_tail); err_printf(m, " ring->tail: 0x%08x\n", ring->cpu_ring_tail);
...@@ -932,6 +933,7 @@ static void i915_record_ring_state(struct drm_device *dev, ...@@ -932,6 +933,7 @@ static void i915_record_ring_state(struct drm_device *dev,
ering->instpm = I915_READ(RING_INSTPM(engine->mmio_base)); ering->instpm = I915_READ(RING_INSTPM(engine->mmio_base));
ering->seqno = engine->get_seqno(engine, false); ering->seqno = engine->get_seqno(engine, false);
ering->acthd = intel_ring_get_active_head(engine); ering->acthd = intel_ring_get_active_head(engine);
ering->last_seqno = engine->last_submitted_seqno;
ering->start = I915_READ_START(engine); ering->start = I915_READ_START(engine);
ering->head = I915_READ_HEAD(engine); ering->head = I915_READ_HEAD(engine);
ering->tail = I915_READ_TAIL(engine); ering->tail = I915_READ_TAIL(engine);
......
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