drm/i915: Sleep whilst waiting for the ring
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 13 Oct 2010 09:09:14 +0000 (10:09 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 19 Oct 2010 08:17:11 +0000 (09:17 +0100)
If userspace is submitting so many long running batches that the ring
becomes full, throttle by sleeping for a 1ms before checking for free
space. Simply yielding was causing excessive scheduler overhead whilst
making no progress.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

drivers/gpu/drm/i915/intel_ringbuffer.c

index d89b887..89004a6 100644 (file)
@@ -707,7 +707,7 @@ int intel_wait_ring_buffer(struct drm_device *dev,
                                master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
                }
 
-               yield();
+               msleep(1);
        } while (!time_after(jiffies, end));
        trace_i915_ring_wait_end (dev);
        return -EBUSY;