diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-06-24 14:55:55 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-06-24 15:02:55 +0100 |
commit | a168b2d8a5195f1744205b2ad7d412eb29bd3f1f (patch) | |
tree | 04631de4c24d32a776b934d18057a176fad55a42 /drivers/gpu/drm/i915/i915_gem_context.c | |
parent | c7c3c07d16dd51faddeb6ae665d360be030b31b0 (diff) |
drm/i915: Mark all default contexts as uninitialised after context loss
When the GPU is reset or state lost through suspend, every default
legacy context needs to reload their state - both the golden render
state and the L3 mapping. Only context images explicitly saved to memory
(i.e. all execlists and non-default legacy contexts) will retain their
state across the reset.
v2: Rebase
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-4-git-send-email-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_context.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_context.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c index 4f4fd65c558b..3a6594b70900 100644 --- a/drivers/gpu/drm/i915/i915_gem_context.c +++ b/drivers/gpu/drm/i915/i915_gem_context.c @@ -476,6 +476,18 @@ void i915_gem_context_lost(struct drm_i915_private *dev_priv) /* Force the GPU state to be restored on enabling */ if (!i915.enable_execlists) { + struct i915_gem_context *ctx; + + list_for_each_entry(ctx, &dev_priv->context_list, link) { + if (!i915_gem_context_is_default(ctx)) + continue; + + for_each_engine(engine, dev_priv) + ctx->engine[engine->id].initialised = false; + + ctx->remap_slice = ALL_L3_SLICES(dev_priv); + } + for_each_engine(engine, dev_priv) { struct intel_context *kce = &dev_priv->kernel_context->engine[engine->id]; @@ -483,7 +495,6 @@ void i915_gem_context_lost(struct drm_i915_private *dev_priv) kce->initialised = true; } } - dev_priv->kernel_context->remap_slice = ALL_L3_SLICES(dev_priv); } void i915_gem_context_fini(struct drm_device *dev) |