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

Joonas Lahtinen joonas.lahtinen at linux.intel.com
Thu Apr 21 07:47:30 UTC 2016


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;
}

> Ah, that would lead to bugs here. After we emit init_context on this
> request, the request must run to completion as the request itself tracks
> modification to global data, e.g. the ctx->initialised flag here and the
> golden render state object's liveness tracking.
> 
> Well that deserves a comment!
> -Chris
> 
-- 
Joonas Lahtinen
Open Source Technology Center
Intel Corporation


More information about the Intel-gfx mailing list