Not only does it make for good documentation and debugging aide, but it is
also vital for when we want to unwind requests - such as when throwing away
an incomplete request.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Link: 
http://patchwork.freedesktop.org/patch/msgid/1470414607-32453-2-git-send-email-arun.siluv...@linux.intel.com
---
 drivers/gpu/drm/i915/i915_drv.h         |  1 +
 drivers/gpu/drm/i915/i915_gem_request.c | 13 +++++++++----
 drivers/gpu/drm/i915/i915_gpu_error.c   |  6 ++++--
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index feec00f769e1..040c3b6300ac 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -557,6 +557,7 @@ struct drm_i915_error_state {
                struct drm_i915_error_request {
                        long jiffies;
                        u32 seqno;
+                       u32 head;
                        u32 tail;
                } *requests;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c 
b/drivers/gpu/drm/i915/i915_gem_request.c
index 6a1661643d3d..6c2553715263 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -391,6 +391,13 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
        if (ret)
                goto err_ctx;
 
+       /* Record the position of the start of the request so that
+        * should we detect the updated seqno part-way through the
+        * GPU processing the request, we never over-estimate the
+        * position of the head.
+        */
+       req->head = req->ring->tail;
+
        return req;
 
 err_ctx:
@@ -467,8 +474,6 @@ void __i915_add_request(struct drm_i915_gem_request 
*request,
 
        trace_i915_gem_request_add(request);
 
-       request->head = request_start;
-
        /* Whilst this request exists, batch_obj will be on the
         * active_list, and so will hold the active reference. Only when this
         * request is retired will the the batch_obj be moved onto the
@@ -489,10 +494,10 @@ void __i915_add_request(struct drm_i915_gem_request 
*request,
        list_add_tail(&request->link, &engine->request_list);
        list_add_tail(&request->ring_link, &ring->request_list);
 
-       /* Record the position of the start of the request so that
+       /* Record the position of the start of the breadcrumb so that
         * should we detect the updated seqno part-way through the
         * GPU processing the request, we never over-estimate the
-        * position of the head.
+        * position of the ring's HEAD.
         */
        request->postfix = ring->tail;
 
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
b/drivers/gpu/drm/i915/i915_gpu_error.c
index eecb87063c88..c9e1246ecd36 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -455,9 +455,10 @@ int i915_error_state_to_str(struct 
drm_i915_error_state_buf *m,
                                   dev_priv->engine[i].name,
                                   ee->num_requests);
                        for (j = 0; j < ee->num_requests; j++) {
-                               err_printf(m, "  seqno 0x%08x, emitted %ld, 
tail 0x%08x\n",
+                               err_printf(m, "  seqno 0x%08x, emitted %ld, 
head 0x%08x tail 0x%08x\n",
                                           ee->requests[j].seqno,
                                           ee->requests[j].jiffies,
+                                          ee->requests[j].head,
                                           ee->requests[j].tail);
                        }
                }
@@ -1205,7 +1206,8 @@ static void i915_gem_record_rings(struct drm_i915_private 
*dev_priv,
                        erq = &ee->requests[count++];
                        erq->seqno = request->fence.seqno;
                        erq->jiffies = request->emitted_jiffies;
-                       erq->tail = request->postfix;
+                       erq->head = request->head;
+                       erq->tail = request->tail;
                }
        }
 }
-- 
2.8.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to