summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-08-04 14:18:13 (GMT)
committerEric Anholt <eric@anholt.net>2010-08-09 18:24:31 (GMT)
commitd97ed3396399126cfca1e12e2b2e2d8bbc4924e5 (patch)
tree831529a147ec7cd85ae080e415a84b351af574fe /drivers/gpu
parent1741dd4aa7552055659bf74ab829a21579407f10 (diff)
downloadlinux-d97ed3396399126cfca1e12e2b2e2d8bbc4924e5.tar.xz
drm/i915: Move ringbuffer accounting to begin/advance.
As we check that the ringbuffer will not wrap upon emission, we do not need to check that incrementing the tail wrapped every time. However, we do upon advancing just in case the tail is now pointing at the very end of the ring. Likewise we can account for the space used during emission in begin() and avoid decrementing it for every emit. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index df8302a..7ab72af 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -731,6 +731,8 @@ void intel_ring_begin(struct drm_device *dev,
intel_wrap_ring_buffer(dev, ring);
if (unlikely(ring->space < n))
intel_wait_ring_buffer(dev, ring, n);
+
+ ring->space -= n;
}
void intel_ring_emit(struct drm_device *dev,
@@ -739,13 +741,12 @@ void intel_ring_emit(struct drm_device *dev,
unsigned int *virt = ring->virtual_start + ring->tail;
*virt = data;
ring->tail += 4;
- ring->tail &= ring->size - 1;
- ring->space -= 4;
}
void intel_ring_advance(struct drm_device *dev,
struct intel_ring_buffer *ring)
{
+ ring->tail &= ring->size - 1;
ring->advance_ring(dev, ring);
}