diff options
author | Mika Kuoppala <mika.kuoppala@linux.intel.com> | 2012-12-04 08:12:03 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-12-06 07:14:34 -0500 |
commit | cbcc80dff3896015385c67d6be0beb3399999e5c (patch) | |
tree | 692fbb95d8a119d19446566d762cc561338fdb73 /drivers/gpu/drm/i915/intel_ringbuffer.c | |
parent | 43a7b924a920729ff775e6a847f671d0ea456801 (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.c | 37 |
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 | ||
1366 | static 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 | |||
1366 | int intel_ring_begin(struct intel_ring_buffer *ring, | 1387 | int 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 | ||
1398 | void intel_ring_advance(struct intel_ring_buffer *ring) | 1405 | void intel_ring_advance(struct intel_ring_buffer *ring) |