Re: [PATCH 1/2] drm/i915: Split intel_engine allocation and initialisation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jan 23, 2017 at 11:41:12AM +0200, Joonas Lahtinen wrote:
> On la, 2017-01-21 at 14:50 +0000, Chris Wilson wrote:
> > In order to reset the GPU early on in the module load sequence, we need
> > to allocate the basic engine structs (to populate the mmio offsets etc).
> > Currently, the engine initialisation allocates both the base struct and
> > also allocate auxiliary objects, which depend upon state setup quite
> > late in the load sequence. We split off the allocation callback for
> > later and allow ourselves to allocate the engine structs themselves
> > early.
> > 
> > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> 
> <SNIP>
> 
> > +int intel_engines_init(struct drm_i915_private *dev_priv)
> > +{
> 
> <SNIP>
> 
> > +	for_each_engine(engine, dev_priv, id) {
> > +		int (*init)(struct intel_engine_cs *engine) = NULL;
> > +
> > +		if (!err) {
> > +			if (i915.enable_execlists)
> > +				init = intel_engines[id].init_execlists;
> > +			else
> > +				init = intel_engines[id].init_legacy;
> > +		}
> > +
> > +		if (!init || (err = init(engine))) {
> > +			kfree(engine);
> > +			dev_priv->engine[id] = NULL;
> > +			continue;
> > +		}
> > +
> > +		mask |= ENGINE_MASK(id);
> > +	}
> 
> As discussed in IRC, this loop is broken after first erroring init.

As answered, it is not.

After an err is set, it and all subsequent engines are freed, and then
all previously initialised engines are run through the cleanup.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux