drm/i915: use __wait_seqno for ring throttle
authorBen Widawsky <ben@bwidawsk.net>
Thu, 26 Apr 2012 23:03:05 +0000 (16:03 -0700)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 3 May 2012 09:18:23 +0000 (11:18 +0200)
It turns out throttle had an almost identical  bit of code to do the
wait. Now we can call the new helper directly.  This is just a bonus,
and not needed for the overall series.

v2: remove irq_get/put which is now in __wait_seqno (Ben)

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c

index c19a621..293f573 100644 (file)
@@ -2981,25 +2981,7 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
        if (seqno == 0)
                return 0;
 
-       ret = 0;
-       if (!i915_seqno_passed(ring->get_seqno(ring), seqno)) {
-               /* And wait for the seqno passing without holding any locks and
-                * causing extra latency for others. This is safe as the irq
-                * generation is designed to be run atomically and so is
-                * lockless.
-                */
-               if (ring->irq_get(ring)) {
-                       ret = wait_event_interruptible(ring->irq_queue,
-                                                      i915_seqno_passed(ring->get_seqno(ring), seqno)
-                                                      || atomic_read(&dev_priv->mm.wedged));
-                       ring->irq_put(ring);
-
-                       if (ret == 0 && atomic_read(&dev_priv->mm.wedged))
-                               ret = -EIO;
-               } else
-                       ret = -EBUSY;
-       }
-
+       ret = __wait_seqno(ring, seqno, true);
        if (ret == 0)
                queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, 0);