From: Dave Gordon <david.s.gordon@xxxxxxxxx> For: VIZ-2021 Signed-off-by: Dave Gordon <david.s.gordon@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_drv.h | 2 ++ drivers/gpu/drm/i915/i915_gem.c | 11 +++++++++-- drivers/gpu/drm/i915/i915_gpu_error.c | 9 +++++++++ drivers/gpu/drm/i915/intel_ringbuffer.h | 14 ++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 779fc70..9b4ab5d 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -567,6 +567,8 @@ struct drm_i915_error_state { u64 ctx_desc; + struct intel_ringbuffer req_ring; + struct drm_i915_error_object { int page_count; u64 gtt_offset; diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index ab6064e..785310c 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2634,8 +2634,15 @@ void __i915_add_request(struct drm_i915_gem_request *request, */ request->batch_obj = obj; - request->emitted_jiffies = jiffies; - ring->last_submitted_seqno = request->seqno; + if (ring->last_submitted_ringbuf == ringbuf) + ringbuf->resubmission_count += 1; + else + ringbuf->resubmission_count = 1; + ring->last_submitted_ringbuf = ringbuf; + ringbuf->total_submission_count += 1; + ringbuf->last_submitted_tail = request->tail; + ringbuf->last_submitted_seqno = ring->last_submitted_seqno = request->seqno; + ringbuf->last_submitted_jiffies = request->emitted_jiffies = jiffies; list_add_tail(&request->list, &ring->request_list); trace_i915_gem_request_add(request); diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index bafaadd..0697fc3 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -522,12 +522,20 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m, } if ((obj = error->ring[i].req_ringbuffer)) { + struct intel_ringbuffer *irb = &error->ring[i].req_ring; + err_printf(m, "%s --- ringbuffer = 0x%08x; %d pages (ctx_desc 0x%08x_%08x)\n", dev_priv->ring[i].name, lower_32_bits(obj->gtt_offset), obj->page_count, upper_32_bits(error->ring[i].ctx_desc), lower_32_bits(error->ring[i].ctx_desc)); + err_printf(m, "\t\tringbuffer head 0x%08x tail 0x%08x space 0x%08x lrh 0x%08x\n", + irb->head, irb->tail, irb->space, irb->last_retired_head); + err_printf(m, "\t\t%llu submission(s), %d consecutive, last at %ld: tail 0x%08x seqno %08x (%d)\n", + irb->total_submission_count, irb->resubmission_count, + irb->last_submitted_jiffies, irb->last_submitted_tail, + irb->last_submitted_seqno, irb->last_submitted_seqno); print_error_obj(m, obj); } @@ -1163,6 +1171,7 @@ static void i915_gem_record_rings(struct drm_device *dev, error->ring[i].ctx_desc = ctx_desc; error->ring[i].req_ringbuffer = i915_error_ggtt_object_create(dev_priv, rbuf->obj); + error->ring[i].req_ring = *rbuf; error->ring[i].hws_page = i915_error_ggtt_object_create(dev_priv, ring->status_page.obj); diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index c472f8a..6bdc1ad 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h @@ -126,6 +126,19 @@ struct intel_ringbuffer { * we can detect new retirements. */ u32 last_retired_head; + + /* + * Consecutive resubmissions are opportunities for the h/w to do + * a 'lite restore' rather than a full context switch. Let's note + * when that happens, in case it's useful for hang diagnosis. + */ + u32 resubmission_count; + u64 total_submission_count; + + /* Info about last time this ringbuffer was submitted (to GuC) */ + unsigned long last_submitted_jiffies; + u32 last_submitted_seqno; + u32 last_submitted_tail; }; struct intel_context; @@ -306,6 +319,7 @@ struct intel_engine_cs { * inspecting request list. */ u32 last_submitted_seqno; + struct intel_ringbuffer *last_submitted_ringbuf; /* deferred free list to allow unreferencing requests outside the driver */ struct list_head delayed_free_list; -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx