aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-07-04 16:18:39 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-07-05 04:00:46 -0400
commitd54a02c041ccfdcfe3efcd1e5b90c6e8d5e7a8d9 (patch)
tree8aacb1a8e7b08770507630a3d7d3f40c0b27a88b
parent4c3c115a1eaea5c699caa49e824df6e5b48396a4 (diff)
drm/i915: don't trylock in the gpu reset code
Simply failing to reset the gpu because someone else might still hold the mutex isn't a great idea - I see reliable silent reset failures. And gpu reset simply needs to be reliable and Just Work. "But ... the deadlocks!" We already kick all processes waiting for the gpu before launching the reset work item. New waiters need to check the wedging state anyway and then bail out. If we have places that can deadlock, we simply need to fix them. "But ... testing!" We have the gpu hangman, and if the current gpu load gem_exec_nop isn't good enough to hit a specific case, we can add a new one. "But ... don't we return -EAGAIN for non-interruptible calls to wait_seqno now?" Yep, but this problem already exists in the current code. A follow up patch will remedy this by returning -EIO for non-interruptible sleeps if the gpu died and the low-level wait bails out with -EAGAIN. Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Tested-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 6edb2d5ec13..e754cdfaec7 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -730,8 +730,7 @@ int i915_reset(struct drm_device *dev)
730 if (!i915_try_reset) 730 if (!i915_try_reset)
731 return 0; 731 return 0;
732 732
733 if (!mutex_trylock(&dev->struct_mutex)) 733 mutex_lock(&dev->struct_mutex);
734 return -EBUSY;
735 734
736 i915_gem_reset(dev); 735 i915_gem_reset(dev);
737 736