diff mbox

[fixes] drm/i915/ringbuffer: Idling requires waiting for the ring to be empty

Message ID 1310490209-20225-1-git-send-email-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson July 12, 2011, 5:03 p.m. UTC
...which is measured by the size and not the amount of space remaining.

Waiting upon size-8, did one of two things. In the common case with more
than 8 bytes available to write into the ring, it would return
immediately. Otherwise, it would timeout given the impossible condition
of waiting for more space than is available in the ring, leading to
warnings such as:

[drm:intel_cleanup_ring_buffer] *ERROR* failed to quiesce render ring
whilst cleaning up: -16

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/intel_ringbuffer.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Ben Widawsky July 12, 2011, 9:45 p.m. UTC | #1
On Tue, 12 Jul 2011 18:03:29 +0100, Chris Wilson wrote:
> ...which is measured by the size and not the amount of space 
> remaining.
>
> Waiting upon size-8, did one of two things. In the common case with 
> more
> than 8 bytes available to write into the ring, it would return
> immediately. Otherwise, it would timeout given the impossible 
> condition
> of waiting for more space than is available in the ring, leading to
> warnings such as:
>
> [drm:intel_cleanup_ring_buffer] *ERROR* failed to quiesce render ring
> whilst cleaning up: -16
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

Reviewed-by: Ben Widawsky <ben@bwidawsk.net>

This may potentially fix:
https://bugzilla.kernel.org/show_bug.cgi?id=38332
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index c0e0ee6..39ac2b6 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -165,7 +165,7 @@  void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring);
 int __must_check intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n);
 static inline int intel_wait_ring_idle(struct intel_ring_buffer *ring)
 {
-	return intel_wait_ring_buffer(ring, ring->space - 8);
+	return intel_wait_ring_buffer(ring, ring->size - 8);
 }
 
 int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n);