From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Move the ring wrap detection out from __intel_ring_prepare() all the way up to intel_ring_begin(). Also convert intel_ring_begin() into a thin wrapper that just does the wrap detection, and calls __intel_ring_begin() which contains the code from the original intel_ring_begin(). This will be useful when we introduce the cacheline safe ring begin function where the wrap detection won't be quite so simple. Cc: Bjoern C <lkml@xxxxxxxxxxxx> Cc: Alexandru DAMIAN <alexandru.damian@xxxxxxxxx> Cc: Enrico Tagliavini <enrico.tagliavini@xxxxxxxxx> Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/intel_ringbuffer.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index ba686d7..a2bd533 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -1595,11 +1595,11 @@ intel_ring_alloc_seqno(struct intel_ring_buffer *ring) } static int __intel_ring_prepare(struct intel_ring_buffer *ring, - int bytes) + int bytes, bool wrap) { int ret; - if (unlikely(ring->tail + bytes > ring->effective_size)) { + if (unlikely(wrap)) { ret = intel_wrap_ring_buffer(ring); if (unlikely(ret)) return ret; @@ -1614,8 +1614,8 @@ static int __intel_ring_prepare(struct intel_ring_buffer *ring, return 0; } -int intel_ring_begin(struct intel_ring_buffer *ring, - int num_dwords) +static int __intel_ring_begin(struct intel_ring_buffer *ring, + int bytes, bool wrap) { drm_i915_private_t *dev_priv = ring->dev->dev_private; int ret; @@ -1625,7 +1625,7 @@ int intel_ring_begin(struct intel_ring_buffer *ring, if (ret) return ret; - ret = __intel_ring_prepare(ring, num_dwords * sizeof(uint32_t)); + ret = __intel_ring_prepare(ring, bytes, wrap); if (ret) return ret; @@ -1634,10 +1634,19 @@ int intel_ring_begin(struct intel_ring_buffer *ring, if (ret) return ret; - ring->space -= num_dwords * sizeof(uint32_t); + ring->space -= bytes; return 0; } +int intel_ring_begin(struct intel_ring_buffer *ring, + int num_dwords) +{ + int bytes = num_dwords * sizeof(uint32_t); + + return __intel_ring_begin(ring, bytes, + ring->tail + bytes > ring->effective_size); +} + void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno) { struct drm_i915_private *dev_priv = ring->dev->dev_private; -- 1.8.3.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx