Chris Wilson <ch...@chris-wilson.co.uk> writes:

> 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;

Nuke the local request_start also?

-Mika

> -
>       /* 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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to