drm/i915: Treat kernel context as initialised
The kernel context exists simply as a placeholder and should never be executed with a render context. It does not need the golden render state, as that will always be applied to a user context. By skipping the initialisation we can avoid issues in attempting to program the golden render context when trying to make the hardware idle. v2: Rebase Testcase: igt/drm_module_reload_basic #byt Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95634 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1466776558-21516-3-git-send-email-chris@chris-wilson.co.uk
This commit is contained in:
parent
0cb26a8ed1
commit
c7c3c07d16
2 changed files with 19 additions and 5 deletions
|
@ -472,13 +472,17 @@ void i915_gem_context_lost(struct drm_i915_private *dev_priv)
|
|||
i915_gem_context_unpin(engine->last_context, engine);
|
||||
engine->last_context = NULL;
|
||||
}
|
||||
|
||||
/* Force the GPU state to be reinitialised on enabling */
|
||||
dev_priv->kernel_context->engine[engine->id].initialised =
|
||||
engine->init_context == NULL;
|
||||
}
|
||||
|
||||
/* Force the GPU state to be reinitialised on enabling */
|
||||
/* Force the GPU state to be restored on enabling */
|
||||
if (!i915.enable_execlists) {
|
||||
for_each_engine(engine, dev_priv) {
|
||||
struct intel_context *kce =
|
||||
&dev_priv->kernel_context->engine[engine->id];
|
||||
|
||||
kce->initialised = true;
|
||||
}
|
||||
}
|
||||
dev_priv->kernel_context->remap_slice = ALL_L3_SLICES(dev_priv);
|
||||
}
|
||||
|
||||
|
|
|
@ -2338,6 +2338,16 @@ static int intel_ring_context_pin(struct i915_gem_context *ctx,
|
|||
goto error;
|
||||
}
|
||||
|
||||
/* The kernel context is only used as a placeholder for flushing the
|
||||
* active context. It is never used for submitting user rendering and
|
||||
* as such never requires the golden render context, and so we can skip
|
||||
* emitting it when we switch to the kernel context. This is required
|
||||
* as during eviction we cannot allocate and pin the renderstate in
|
||||
* order to initialise the context.
|
||||
*/
|
||||
if (ctx == ctx->i915->kernel_context)
|
||||
ce->initialised = true;
|
||||
|
||||
i915_gem_context_reference(ctx);
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in a new issue