drm/i915: Print the batchbuffer offset next to BBADDR in error state
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 15 Aug 2016 09:49:09 +0000 (10:49 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 15 Aug 2016 10:01:16 +0000 (11:01 +0100)
It is useful when looking at captured error states to check the recorded
BBADDR register (the address of the last batchbuffer instruction loaded)
against the expected offset of the batch buffer, and so do a quick check
that (a) the capture is true or (b) HEAD hasn't wandered off into the
badlands.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1471254551-25805-30-git-send-email-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gpu_error.c

index d9f29244bafbca2f0d4e2fb28f0b8b8a561ee281..bb7d8130dbfdf01e330e6694548aef28685cca75 100644 (file)
@@ -775,6 +775,7 @@ struct drm_i915_error_state {
                struct drm_i915_error_object {
                        int page_count;
                        u64 gtt_offset;
+                       u64 gtt_size;
                        u32 *pages[0];
                } *ringbuffer, *batchbuffer, *wa_batchbuffer, *ctx, *hws_page;
 
index 638664f78dd5b2769061318e8b18a8b61653a97e..0f0b65214ef1767e588c5831bb3365a727399b47 100644 (file)
@@ -242,8 +242,16 @@ static void error_print_engine(struct drm_i915_error_state_buf *m,
        err_printf(m, "  IPEIR: 0x%08x\n", ee->ipeir);
        err_printf(m, "  IPEHR: 0x%08x\n", ee->ipehr);
        err_printf(m, "  INSTDONE: 0x%08x\n", ee->instdone);
+       if (ee->batchbuffer) {
+               u64 start = ee->batchbuffer->gtt_offset;
+               u64 end = start + ee->batchbuffer->gtt_size;
+
+               err_printf(m, "  batch: [0x%08x_%08x, 0x%08x_%08x]\n",
+                          upper_32_bits(start), lower_32_bits(start),
+                          upper_32_bits(end), lower_32_bits(end));
+       }
        if (INTEL_GEN(m->i915) >= 4) {
-               err_printf(m, "  BBADDR: 0x%08x %08x\n",
+               err_printf(m, "  BBADDR: 0x%08x_%08x\n",
                           (u32)(ee->bbaddr>>32), (u32)ee->bbaddr);
                err_printf(m, "  BB_STATE: 0x%08x\n", ee->bbstate);
                err_printf(m, "  INSTPS: 0x%08x\n", ee->instps);
@@ -677,7 +685,10 @@ i915_error_object_create(struct drm_i915_private *dev_priv,
        if (!dst)
                return NULL;
 
-       reloc_offset = dst->gtt_offset = vma->node.start;
+       dst->gtt_offset = vma->node.start;
+       dst->gtt_size = vma->node.size;
+
+       reloc_offset = dst->gtt_offset;
        use_ggtt = (src->cache_level == I915_CACHE_NONE &&
                   (vma->flags & I915_VMA_GLOBAL_BIND) &&
                   reloc_offset + num_pages * PAGE_SIZE <= ggtt->mappable_end);