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 d89b88791aac7d763f1f72dbec10d750b78655c6..89004a622f4971a6e377bcb60c4fd20c24abbabe 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;