[Intel-gfx] [PATCH v4] drm/i915: Add null state batch to active list

Daniel Vetter daniel at ffwll.ch
Thu May 22 14:10:59 CEST 2014


On Wed, May 21, 2014 at 07:01:06PM +0300, Mika Kuoppala wrote:
> From: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> 
> for proper refcounting to take place as we use
> i915_add_request() for it.
> 
> i915_add_request() also takes the context for the request
> from ring->last_context so move the null state batch
> submission after the ring context has been set.
> 
> v2: we need to check for correct ring now (Ville Syrjälä)
> v3: no need to expose i915_gem_move_object_to_active (Chris Wilson)
> v4: cargoculted vma/active/inactive error handling removed (Chris Wilson)
> 
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Damien Lespiau <damien.lespiau at intel.com>
> Signed-off-by: Mika Kuoppala <mika.kuoppala at intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>

Ok, merged instead of v3 with Chris' irc r-b.

Thanks, Daniel
> ---
>  drivers/gpu/drm/i915/i915_gem_context.c      |   16 ++++++++--------
>  drivers/gpu/drm/i915/i915_gem_render_state.c |    8 ++++++--
>  2 files changed, 14 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index f220c94..6a2d847a 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -700,21 +700,21 @@ static int do_switch(struct intel_ring_buffer *ring,
>  		/* obj is kept alive until the next request by its active ref */
>  		i915_gem_object_ggtt_unpin(from->obj);
>  		i915_gem_context_unreference(from);
> -	} else {
> -		if (to->is_initialized == false) {
> -			ret = i915_gem_render_state_init(ring);
> -			if (ret)
> -				DRM_ERROR("init render state: %d\n", ret);
> -		}
>  	}
>  
> -	to->is_initialized = true;
> -
>  done:
>  	i915_gem_context_reference(to);
>  	ring->last_context = to;
>  	to->last_ring = ring;
>  
> +	if (ring->id == RCS && !to->is_initialized && from == NULL) {
> +		ret = i915_gem_render_state_init(ring);
> +		if (ret)
> +			DRM_ERROR("init render state: %d\n", ret);
> +	}
> +
> +	to->is_initialized = true;
> +
>  	return 0;
>  
>  unpin_out:
> diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c
> index 392aa7b..cfbf6fc 100644
> --- a/drivers/gpu/drm/i915/i915_gem_render_state.c
> +++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
> @@ -164,9 +164,11 @@ int i915_gem_render_state_init(struct intel_ring_buffer *ring)
>  	const int gen = INTEL_INFO(ring->dev)->gen;
>  	struct i915_render_state *so;
>  	const struct intel_renderstate_rodata *rodata;
> -	u32 seqno;
>  	int ret;
>  
> +	if (WARN_ON(ring->id != RCS))
> +		return -ENOENT;
> +
>  	rodata = render_state_get_rodata(ring->dev, gen);
>  	if (rodata == NULL)
>  		return 0;
> @@ -186,8 +188,10 @@ int i915_gem_render_state_init(struct intel_ring_buffer *ring)
>  	if (ret)
>  		goto out;
>  
> -	ret = i915_add_request(ring, &seqno);
> +	i915_vma_move_to_active(i915_gem_obj_to_ggtt(so->obj), ring);
>  
> +	ret = __i915_add_request(ring, NULL, so->obj, NULL);
> +	/* __i915_add_request moves object to inactive if it fails */
>  out:
>  	render_state_free(so);
>  	return ret;
> -- 
> 1.7.9.5
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch



More information about the Intel-gfx mailing list