[Intel-gfx] [PATCH 14/19] drm/i915: Move context initialisation to first-use

Joonas Lahtinen joonas.lahtinen at linux.intel.com
Thu Apr 21 08:37:37 UTC 2016


On to, 2016-04-21 at 08:56 +0100, Chris Wilson wrote:
> On Thu, Apr 21, 2016 at 10:47:30AM +0300, Joonas Lahtinen wrote:
> > 
> > On to, 2016-04-21 at 08:08 +0100, Chris Wilson wrote:
> > > 
> > > On Thu, Apr 21, 2016 at 09:57:03AM +0300, Joonas Lahtinen wrote:
> > > > 
> > > > 
> > > > On ke, 2016-04-20 at 19:42 +0100, Chris Wilson wrote:
> > > > > 
> > > > > 
> > > > > +	if (!request->ctx->engine[engine->id].initialised) {
> > > > > +		ret = engine->init_context(request);
> > > > > +		if (ret) {
> > > > > +			intel_lr_context_unpin(request->ctx, engine);
> > > > I prefer the goto teardown path, it's easy to read and modify later on.
> > Meant something like this which is functionally the same but less
> > nesting;
> > 
> > 	if (request->ctx->engine[engine->id].initialised)
> > 		return 0;
> > 
> > 	ret = engine->init_context(request);
> > 	if (ret)
> > 		goto out_unpin;
> > 
> > 	request->ctx->engine[engine->id].initialised = true;
> > 
> > 	return 0;
> > 
> > out_unpin:
> > 	intel_lr_context_unpin(request->ctx, engine);
> > 
> > 	return ret;
> Yes, I am arguing that this leaves the next person thinking it will be
> safe to extend the unwind. And so by not conforming to the idiom, it
> should be more of a danger signal.
> 
> Compromise?

Fair enough.

> 
>         if (!request->ctx->engine[engine->id].initialised) {
>                 ret = engine->init_context(request);
>                 if (ret)
>                         goto err_unpin;
> 
>                 request->ctx->engine[engine->id].initialised = true;
>         }
> 
>         /* Note that after this point, we have committed to using
>          * this request as it is being used to both track the
>          * state of engine initialisation and liveness of the
>          * golden renderstate above. Think twice before you try
>          * to cancel/unwind this request now.
>          */
> 
>         return 0;
> 
> err_unpin:
>         intel_lr_context_unpin(request->ctx, engine);
>         return ret;
> }
> 
> 
-- 
Joonas Lahtinen
Open Source Technology Center
Intel Corporation


More information about the Intel-gfx mailing list