drm/i915: Move calling engine->init_hw() to its own function
Just a simple refactor to move a loop and some support code out of i915_gem_init_hw(). This is in preparation for avoiding a race between the tasklet writing to ELSP whilst simultaneously being written by engine->init_hw() following a GPU reset. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170208143033.11651-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
519d524981
commit
20a8a74ad9
|
@ -4367,11 +4367,24 @@ static void init_unused_rings(struct drm_i915_private *dev_priv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int __i915_gem_restart_engines(void *data)
|
||||||
i915_gem_init_hw(struct drm_i915_private *dev_priv)
|
|
||||||
{
|
{
|
||||||
|
struct drm_i915_private *i915 = data;
|
||||||
struct intel_engine_cs *engine;
|
struct intel_engine_cs *engine;
|
||||||
enum intel_engine_id id;
|
enum intel_engine_id id;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
for_each_engine(engine, i915, id) {
|
||||||
|
err = engine->init_hw(engine);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i915_gem_init_hw(struct drm_i915_private *dev_priv)
|
||||||
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dev_priv->gt.last_init_time = ktime_get();
|
dev_priv->gt.last_init_time = ktime_get();
|
||||||
|
@ -4417,11 +4430,9 @@ i915_gem_init_hw(struct drm_i915_private *dev_priv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Need to do basic initialisation of all rings first: */
|
/* Need to do basic initialisation of all rings first: */
|
||||||
for_each_engine(engine, dev_priv, id) {
|
ret = __i915_gem_restart_engines(dev_priv);
|
||||||
ret = engine->init_hw(engine);
|
if (ret)
|
||||||
if (ret)
|
goto out;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
intel_mocs_init_l3cc_table(dev_priv);
|
intel_mocs_init_l3cc_table(dev_priv);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue