[Intel-gfx] [PATCH 21/53] drm/i915: Set context in request from creation even in legacy mode

Tomas Elf tomas.elf at intel.com
Thu Mar 5 10:02:10 PST 2015


On 19/02/2015 17:17, John.C.Harrison at Intel.com wrote:
> From: John Harrison <John.C.Harrison at Intel.com>
>
> In execlist mode, the context object pointer is written in to the request
> structure (and reference counted) at the point of request creation. In legacy
> mode, this only happens inside i915_add_request().
>
> This patch updates the legacy code path to match the execlist version. This
> allows all the intermediate code between request creation and request submission
> to get at the context object given only a request structure. Thus negating the
> need to pass context pointers here, there and everywhere.
>
> For: VIZ-5115
> Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
> ---
>   drivers/gpu/drm/i915/i915_gem.c         |    9 +--------
>   drivers/gpu/drm/i915/intel_ringbuffer.c |    2 ++
>   2 files changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 379bf44..64288e3 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -2470,14 +2470,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
>   	WARN_ON(request->batch_obj && obj);
>   	request->batch_obj = obj;
>
> -	if (!i915.enable_execlists) {
> -		/* Hold a reference to the current context so that we can inspect
> -		 * it later in case a hangcheck error event fires.
> -		 */
> -		request->ctx = ring->last_context;
> -		if (request->ctx)
> -			i915_gem_context_reference(request->ctx);
> -	}
> +	WARN_ON(request->ctx != ring->last_context);

__i915_add_request is gen agnostic but ring->last_context is only used 
in legacy mode. Maybe you want to check for !i915.enable_execlists just 
like in the block you removed above?

>
>   	request->emitted_jiffies = jiffies;
>   	list_add_tail(&request->list, &ring->request_list);
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 1a9f884..05a7e33 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -2186,6 +2186,8 @@ intel_ring_alloc_request(struct intel_engine_cs *ring,
>   	request->ring = ring;
>   	request->ringbuf = ring->buffer;
>   	request->uniq = dev_private->request_uniq++;
> +	request->ctx = ctx;
> +	i915_gem_context_reference(request->ctx);
>
>   	ret = i915_gem_get_seqno(ring->dev, &request->seqno);
>   	if (ret) {
>



More information about the Intel-gfx mailing list