drm/i915: kicking rings stuck on semaphores considered harmful
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 14 Dec 2011 12:56:58 +0000 (13:56 +0100)
committerKeith Packard <keithp@keithp.com>
Tue, 3 Jan 2012 18:26:07 +0000 (10:26 -0800)
If our semaphore logic gets confused and we have a ring stuck waiting
for one, there's a decent chance it'll just execute garbage when being
kicked. Also, kicking the ring obscures the place where the error
first occured, making error_state decoding much harder.

So drop this an let gpu reset handle this mess in a clean fashion.

In contrast, kicking rings stuck on MI_WAIT is rather harmless, at
worst there'll be a bit of screen-flickering. There's also old
broken userspace out there which needs this as a  work-around.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Chris Wilson <chris@hchris-wilson.co.uk>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
drivers/gpu/drm/i915/i915_irq.c

index 58493114c942a0459c3de7ab48bb16af8a1ace84..5d433fc11ace138748907b17cbb3a9932732b46b 100644 (file)
@@ -1649,13 +1649,6 @@ static bool kick_ring(struct intel_ring_buffer *ring)
                I915_WRITE_CTL(ring, tmp);
                return true;
        }
-       if (IS_GEN6(dev) &&
-           (tmp & RING_WAIT_SEMAPHORE)) {
-               DRM_ERROR("Kicking stuck semaphore on %s\n",
-                         ring->name);
-               I915_WRITE_CTL(ring, tmp);
-               return true;
-       }
        return false;
 }