aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorMika Kuoppala <mika.kuoppala@linux.intel.com>2012-12-04 08:12:03 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-12-06 07:14:34 -0500
commitcbcc80dff3896015385c67d6be0beb3399999e5c (patch)
tree692fbb95d8a119d19446566d762cc561338fdb73 /drivers/gpu/drm/i915/intel_ringbuffer.c
parent43a7b924a920729ff775e6a847f671d0ea456801 (diff)
drm/i915: Split intel_ring_begin
In preparation for handling ring seqno wrapping, split intel_ring_begin into helper part which doesn't allocate seqno. Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 36e1e13ae946..01a660a7c167 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -1363,11 +1363,31 @@ intel_ring_alloc_seqno(struct intel_ring_buffer *ring)
1363 return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_request); 1363 return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_request);
1364} 1364}
1365 1365
1366static int __intel_ring_begin(struct intel_ring_buffer *ring,
1367 int bytes)
1368{
1369 int ret;
1370
1371 if (unlikely(ring->tail + bytes > ring->effective_size)) {
1372 ret = intel_wrap_ring_buffer(ring);
1373 if (unlikely(ret))
1374 return ret;
1375 }
1376
1377 if (unlikely(ring->space < bytes)) {
1378 ret = ring_wait_for_space(ring, bytes);
1379 if (unlikely(ret))
1380 return ret;
1381 }
1382
1383 ring->space -= bytes;
1384 return 0;
1385}
1386
1366int intel_ring_begin(struct intel_ring_buffer *ring, 1387int intel_ring_begin(struct intel_ring_buffer *ring,
1367 int num_dwords) 1388 int num_dwords)
1368{ 1389{
1369 drm_i915_private_t *dev_priv = ring->dev->dev_private; 1390 drm_i915_private_t *dev_priv = ring->dev->dev_private;
1370 int n = 4*num_dwords;
1371 int ret; 1391 int ret;
1372 1392
1373 ret = i915_gem_check_wedge(dev_priv, dev_priv->mm.interruptible); 1393 ret = i915_gem_check_wedge(dev_priv, dev_priv->mm.interruptible);
@@ -1379,20 +1399,7 @@ int intel_ring_begin(struct intel_ring_buffer *ring,
1379 if (ret) 1399 if (ret)
1380 return ret; 1400 return ret;
1381 1401
1382 if (unlikely(ring->tail + n > ring->effective_size)) { 1402 return __intel_ring_begin(ring, num_dwords * sizeof(uint32_t));
1383 ret = intel_wrap_ring_buffer(ring);
1384 if (unlikely(ret))
1385 return ret;
1386 }
1387
1388 if (unlikely(ring->space < n)) {
1389 ret = ring_wait_for_space(ring, n);
1390 if (unlikely(ret))
1391 return ret;
1392 }
1393
1394 ring->space -= n;
1395 return 0;
1396} 1403}
1397 1404
1398void intel_ring_advance(struct intel_ring_buffer *ring) 1405void intel_ring_advance(struct intel_ring_buffer *ring)