summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.c
diff options
context:
space:
mode:
authorChris Wilson2017-01-17 16:59:06 +0100
committerChris Wilson2017-01-18 11:47:26 +0100
commit0e178aef8f13ff11dc9dec82c2cd849981cb1ad1 (patch)
tree6c51af91668b6b356e3c3faead97ee8dd92d2239 /drivers/gpu/drm/i915/i915_drv.c
parentdrm/i915: Tidy up engine reset logic (diff)
downloadkernel-qcow2-linux-0e178aef8f13ff11dc9dec82c2cd849981cb1ad1.tar.gz
kernel-qcow2-linux-0e178aef8f13ff11dc9dec82c2cd849981cb1ad1.tar.xz
kernel-qcow2-linux-0e178aef8f13ff11dc9dec82c2cd849981cb1ad1.zip
drm/i915: Detect a failed GPU reset+recovery
If we can't recover the GPU after the reset, mark it as wedged to cancel the outstanding tasks and to prevent new users from trying to use the broken GPU. v2: Check the same ring is hung again before declaring the reset broken. v3: use engine_stalled (Mika) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1484668747-9120-6-git-send-email-mika.kuoppala@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.c')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index fbad2b64b890..348dec482502 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1761,7 +1761,12 @@ void i915_reset(struct drm_i915_private *dev_priv)
pr_notice("drm/i915: Resetting chip after gpu hang\n");
disable_irq(dev_priv->drm.irq);
- i915_gem_reset_prepare(dev_priv);
+ ret = i915_gem_reset_prepare(dev_priv);
+ if (ret) {
+ DRM_ERROR("GPU recovery failed\n");
+ intel_gpu_reset(dev_priv, ALL_ENGINES);
+ goto error;
+ }
ret = intel_gpu_reset(dev_priv, ALL_ENGINES);
if (ret) {