[Intel-gfx] [PATCH 01/55] drm/i915: Re-instate request->uniq becuase it is extremely useful

Tomas Elf tomas.elf at intel.com
Wed Jun 3 04:14:21 PDT 2015


On 29/05/2015 17:43, John.C.Harrison at Intel.com wrote:
> From: John Harrison <John.C.Harrison at Intel.com>
>
> The seqno value cannot always be used when debugging issues via trace
> points. This is because it can be reset back to start, especially
> during TDR type tests. Also, when the scheduler arrives the seqno is
> only valid while a given request is executing on the hardware. While
> the request is simply queued waiting for submission, it's seqno value
> will be zero (meaning invalid).
>
> For: VIZ-5115
> Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
> ---
>   drivers/gpu/drm/i915/i915_drv.h   |    4 ++++
>   drivers/gpu/drm/i915/i915_gem.c   |    1 +
>   drivers/gpu/drm/i915/i915_trace.h |   13 +++++++++----
>   drivers/gpu/drm/i915/intel_lrc.c  |    2 ++
>   4 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 1038f5c..0347eb9 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1882,6 +1882,8 @@ struct drm_i915_private {
>
>   	bool edp_low_vswing;
>
> +	uint32_t request_uniq;
> +
>   	/*
>   	 * NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch
>   	 * will be rejected. Instead look for a better place.
> @@ -2160,6 +2162,8 @@ struct drm_i915_gem_request {
>   	/** process identifier submitting this request */
>   	struct pid *pid;
>
> +	uint32_t uniq;
> +
>   	/**
>   	 * The ELSP only accepts two elements at a time, so we queue
>   	 * context/tail pairs on a given queue (ring->execlist_queue) until the
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index cc206f1..68f1d1e 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -2657,6 +2657,7 @@ int i915_gem_request_alloc(struct intel_engine_cs *ring,
>   		goto err;
>
>   	req->ring = ring;
> +	req->uniq = dev_priv->request_uniq++;
>
>   	if (i915.enable_execlists)
>   		ret = intel_logical_ring_alloc_request_extras(req, ctx);
> diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
> index 497cba5..6cbc280 100644
> --- a/drivers/gpu/drm/i915/i915_trace.h
> +++ b/drivers/gpu/drm/i915/i915_trace.h
> @@ -504,6 +504,7 @@ DECLARE_EVENT_CLASS(i915_gem_request,
>   	    TP_STRUCT__entry(
>   			     __field(u32, dev)
>   			     __field(u32, ring)
> +			     __field(u32, uniq)
>   			     __field(u32, seqno)
>   			     ),
>
> @@ -512,11 +513,13 @@ DECLARE_EVENT_CLASS(i915_gem_request,
>   						i915_gem_request_get_ring(req);
>   			   __entry->dev = ring->dev->primary->index;
>   			   __entry->ring = ring->id;
> +			   __entry->uniq = req ? req->uniq : 0;
>   			   __entry->seqno = i915_gem_request_get_seqno(req);
>   			   ),
>
> -	    TP_printk("dev=%u, ring=%u, seqno=%u",
> -		      __entry->dev, __entry->ring, __entry->seqno)
> +	    TP_printk("dev=%u, ring=%u, uniq=%u, seqno=%u",
> +		      __entry->dev, __entry->ring, __entry->uniq,
> +		      __entry->seqno)
>   );
>
>   DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
> @@ -561,6 +564,7 @@ TRACE_EVENT(i915_gem_request_wait_begin,
>   	    TP_STRUCT__entry(
>   			     __field(u32, dev)
>   			     __field(u32, ring)
> +			     __field(u32, uniq)
>   			     __field(u32, seqno)
>   			     __field(bool, blocking)
>   			     ),
> @@ -576,13 +580,14 @@ TRACE_EVENT(i915_gem_request_wait_begin,
>   						i915_gem_request_get_ring(req);
>   			   __entry->dev = ring->dev->primary->index;
>   			   __entry->ring = ring->id;
> +			   __entry->uniq = req ? req->uniq : 0;
>   			   __entry->seqno = i915_gem_request_get_seqno(req);
>   			   __entry->blocking =
>   				     mutex_is_locked(&ring->dev->struct_mutex);
>   			   ),
>
> -	    TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s",
> -		      __entry->dev, __entry->ring,
> +	    TP_printk("dev=%u, ring=%u, uniq=%u, seqno=%u, blocking=%s",
> +		      __entry->dev, __entry->ring, __entry->uniq,
>   		      __entry->seqno, __entry->blocking ?  "yes (NB)" : "no")
>   );
>
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index 96ae90a..6a5ed07 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -549,6 +549,7 @@ static int execlists_context_queue(struct intel_engine_cs *ring,
>   				   struct drm_i915_gem_request *request)
>   {
>   	struct drm_i915_gem_request *cursor;
> +	struct drm_i915_private *dev_priv = ring->dev->dev_private;
>   	int num_elements = 0;
>
>   	if (to != ring->default_context)
> @@ -565,6 +566,7 @@ static int execlists_context_queue(struct intel_engine_cs *ring,
>   		request->ring = ring;
>   		request->ctx = to;
>   		kref_init(&request->ref);
> +		request->uniq = dev_priv->request_uniq++;
>   		i915_gem_context_reference(request->ctx);
>   	} else {
>   		i915_gem_request_reference(request);
>


Reviewed-by: Tomas Elf <tomas.elf at intel.com>

Thanks,
Tomas



More information about the Intel-gfx mailing list