[Intel-gfx] [PATCH 12/16] drm/i915: Reorder ctx unref on ppgtt cleanup

Daniel Vetter daniel at ffwll.ch
Thu Jul 17 11:56:22 CEST 2014


On Tue, Jul 01, 2014 at 11:17:47AM -0700, Ben Widawsky wrote:
> The comment [which was mine] is wrong. The context object can never be
> bound in a PPGTT because it is only capable of living in the Global GTT.
> So, remove the comment, and reorder the unref. What's nice about the
> latter is it keeps the context object alive past the PPGTT. This makes
> the destroy ordering symmetric with the creation ordering.
> 
> Create:
> 1. Create context
> 2. Create PPGTT
> 
> Destroy:
> 1. Destroy PPGTT
> 2. Destroy context
> 
> As far as I know, this does not fix a bug. The code previously kept the
> context data structure, only the object was gone. As the code was,
> nothing tried to use the object after this point.
> 
> NOTE: If in the future we have cases where the PPGTT can/should outlive
> the context (which doesn't occur today, but the code permits it), this
> ordering does not matter. Even if this occurs, as it stands now, we do
> not expect that to be the normal case, and having this order makes
> debugging a bit easier if we're tracking object lifetimes for the
> context vs ppgtt
> 
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>

Queued for -next, thanks for the patch.
-Daniel
> ---
>  drivers/gpu/drm/i915/i915_gem_context.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index b6803b3..8d106d9 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -185,14 +185,12 @@ void i915_gem_context_free(struct kref *ctx_ref)
>  		/* We refcount even the aliasing PPGTT to keep the code symmetric */
>  		if (USES_PPGTT(ctx->obj->base.dev))
>  			ppgtt = ctx_to_ppgtt(ctx);
> -
> -		/* XXX: Free up the object before tearing down the address space, in
> -		 * case we're bound in the PPGTT */
> -		drm_gem_object_unreference(&ctx->obj->base);
>  	}
>  
>  	if (ppgtt)
>  		kref_put(&ppgtt->ref, ppgtt_release);
> +	if (ctx->obj)
> +		drm_gem_object_unreference(&ctx->obj->base);
>  	list_del(&ctx->link);
>  	kfree(ctx);
>  }
> -- 
> 2.0.1
> 
> _______________________________________________
> 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