Ben complained in his review of write RING_TAIL once per request that intel_ring_advance() did nothing and was confusing with __intel_ring_advance() doing the hard work. This patch drops the intel_ring_advance(), and renames __intel_ring_advance() to intel_ring_commit(). We go one step further and rename intel_ring_begin() to intel_ring_get_space() so that the asymmetry looks less startling. The advantage of intel_ring_begin()/intel_ring_advance() is that that demarcated a known number of dword writes to the ring, with the intention of making it easier for the reviewer to check the count. The advantage of intel_ring_get_space(), ..., intel_ring_commit() is that the relaxed rules on the TAIL write are more obvious. There is no implicit nop (intel_ring_advance) to befuddle the reader. If the commands need to be emitter immediate, the reader knows to look for an explicit intel_ring_commit(). Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/i915_dma.c | 4 +- drivers/gpu/drm/i915/i915_gem_context.c | 7 +-- drivers/gpu/drm/i915/i915_gem_exec.c | 4 +- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 9 +-- drivers/gpu/drm/i915/intel_display.c | 20 +++---- drivers/gpu/drm/i915/intel_overlay.c | 12 ++-- drivers/gpu/drm/i915/intel_ringbuffer.c | 82 +++++++++++----------------- drivers/gpu/drm/i915/intel_ringbuffer.h | 8 +-- 8 files changed, 58 insertions(+), 88 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index c0fb23e..fb50467 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -46,13 +46,13 @@ #define LP_RING(d) (&((struct drm_i915_private *)(d))->ring[RCS]) #define BEGIN_LP_RING(n) \ - intel_ring_begin(LP_RING(dev_priv), (n)) + intel_ring_get_space(LP_RING(dev_priv), (n)) #define OUT_RING(x) \ intel_ring_emit(LP_RING(dev_priv), x) #define ADVANCE_LP_RING() \ - __intel_ring_advance(LP_RING(dev_priv)) + intel_ring_commit(LP_RING(dev_priv)) /** * Lock test for when it's just for synchronization of ring access. diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c index fae2f4d..729b1bb 100644 --- a/drivers/gpu/drm/i915/i915_gem_context.c +++ b/drivers/gpu/drm/i915/i915_gem_context.c @@ -370,7 +370,7 @@ mi_set_context(struct intel_ring_buffer *ring, if (!new_context->is_initialized) len += 2; - ret = intel_ring_begin(ring, len); + ret = intel_ring_get_space(ring, len); if (ret) return ret; @@ -419,10 +419,7 @@ mi_set_context(struct intel_ring_buffer *ring, break; } - intel_ring_advance(ring); - - return ret; - + return 0; } static int do_switch(struct i915_hw_context *to) diff --git a/drivers/gpu/drm/i915/i915_gem_exec.c b/drivers/gpu/drm/i915/i915_gem_exec.c index 4da3704..2d434b2 100644 --- a/drivers/gpu/drm/i915/i915_gem_exec.c +++ b/drivers/gpu/drm/i915/i915_gem_exec.c @@ -100,7 +100,7 @@ int i915_gem_exec_clear_object(struct drm_i915_gem_object *obj) if (ret) goto unpin; - ret = intel_ring_begin(ring, 6); + ret = intel_ring_get_space(ring, 6); if (ret) goto unpin; @@ -111,7 +111,7 @@ int i915_gem_exec_clear_object(struct drm_i915_gem_object *obj) intel_ring_emit(ring, 0); intel_ring_emit(ring, MI_NOOP); - __intel_ring_advance(ring); + intel_ring_commit(ring); i915_gem_exec_dirty_object(obj, ring); unpin: diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 9b7785d..ca0a2f5 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -899,7 +899,7 @@ i915_reset_gen7_sol_offsets(struct drm_device *dev, if (!IS_GEN7(dev) || ring != &dev_priv->ring[RCS]) return 0; - ret = intel_ring_begin(ring, 4 * 3); + ret = intel_ring_get_space(ring, 4 * 3); if (ret) return ret; @@ -909,8 +909,6 @@ i915_reset_gen7_sol_offsets(struct drm_device *dev, intel_ring_emit(ring, 0); } - intel_ring_advance(ring); - return 0; } @@ -1121,15 +1119,14 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, if (ring == &dev_priv->ring[RCS] && mode != dev_priv->relative_constants_mode) { - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) - goto err; + goto err; intel_ring_emit(ring, MI_NOOP); intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1)); intel_ring_emit(ring, INSTPM); intel_ring_emit(ring, mask << 16 | mode); - intel_ring_advance(ring); dev_priv->relative_constants_mode = mode; } diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 5741fd8..0ac8645 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -7668,7 +7668,7 @@ static int intel_gen2_queue_flip(struct drm_device *dev, if (ret) goto err; - ret = intel_ring_begin(ring, 6); + ret = intel_ring_get_space(ring, 6); if (ret) goto err_unpin; @@ -7688,7 +7688,7 @@ static int intel_gen2_queue_flip(struct drm_device *dev, intel_ring_emit(ring, 0); /* aux display base address, unused */ intel_mark_page_flip_active(intel_crtc); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; err_unpin: @@ -7712,7 +7712,7 @@ static int intel_gen3_queue_flip(struct drm_device *dev, if (ret) goto err; - ret = intel_ring_begin(ring, 6); + ret = intel_ring_get_space(ring, 6); if (ret) goto err_unpin; @@ -7729,7 +7729,7 @@ static int intel_gen3_queue_flip(struct drm_device *dev, intel_ring_emit(ring, MI_NOOP); intel_mark_page_flip_active(intel_crtc); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; err_unpin: @@ -7753,7 +7753,7 @@ static int intel_gen4_queue_flip(struct drm_device *dev, if (ret) goto err; - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) goto err_unpin; @@ -7777,7 +7777,7 @@ static int intel_gen4_queue_flip(struct drm_device *dev, intel_ring_emit(ring, pf | pipesrc); intel_mark_page_flip_active(intel_crtc); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; err_unpin: @@ -7801,7 +7801,7 @@ static int intel_gen6_queue_flip(struct drm_device *dev, if (ret) goto err; - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) goto err_unpin; @@ -7821,7 +7821,7 @@ static int intel_gen6_queue_flip(struct drm_device *dev, intel_ring_emit(ring, pf | pipesrc); intel_mark_page_flip_active(intel_crtc); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; err_unpin: @@ -7869,7 +7869,7 @@ static int intel_gen7_queue_flip(struct drm_device *dev, if (ring->id == RCS) len += 6; - ret = intel_ring_begin(ring, len); + ret = intel_ring_get_space(ring, len); if (ret) goto err_unpin; @@ -7899,7 +7899,7 @@ static int intel_gen7_queue_flip(struct drm_device *dev, intel_ring_emit(ring, (MI_NOOP)); intel_mark_page_flip_active(intel_crtc); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; err_unpin: diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index bf4da6e..91d5917 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c @@ -245,7 +245,7 @@ static int intel_overlay_on(struct intel_overlay *overlay) WARN_ON(IS_I830(dev) && !(dev_priv->quirks & QUIRK_PIPEA_FORCE)); - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -253,7 +253,6 @@ static int intel_overlay_on(struct intel_overlay *overlay) intel_ring_emit(ring, overlay->flip_addr | OFC_UPDATE); intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); return intel_overlay_do_wait_request(overlay, NULL); } @@ -279,13 +278,12 @@ static int intel_overlay_continue(struct intel_overlay *overlay, if (tmp & (1 << 17)) DRM_DEBUG("overlay underrun, DOVSTA: %x\n", tmp); - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE); intel_ring_emit(ring, flip_addr); - intel_ring_advance(ring); return i915_add_request(ring, &overlay->last_flip_req); } @@ -333,7 +331,7 @@ static int intel_overlay_off(struct intel_overlay *overlay) * of the hw. Do it in both cases */ flip_addr |= OFC_UPDATE; - ret = intel_ring_begin(ring, 6); + ret = intel_ring_get_space(ring, 6); if (ret) return ret; @@ -353,7 +351,6 @@ static int intel_overlay_off(struct intel_overlay *overlay) intel_ring_emit(ring, flip_addr); intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); } - intel_ring_advance(ring); return intel_overlay_do_wait_request(overlay, intel_overlay_off_tail); } @@ -401,13 +398,12 @@ static int intel_overlay_release_old_vid(struct intel_overlay *overlay) if (I915_READ(ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT) { /* synchronous slowpath */ - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); ret = intel_overlay_do_wait_request(overlay, intel_overlay_release_old_vid_tail); diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 7fa52bd..593e82f 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -41,7 +41,7 @@ static inline int ring_space(struct intel_ring_buffer *ring) return space; } -void __intel_ring_advance(struct intel_ring_buffer *ring) +void intel_ring_commit(struct intel_ring_buffer *ring) { struct drm_i915_private *dev_priv = ring->dev->dev_private; @@ -66,13 +66,13 @@ gen2_render_ring_flush(struct intel_ring_buffer *ring, if (invalidate_domains & I915_GEM_DOMAIN_SAMPLER) cmd |= MI_READ_FLUSH; - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; intel_ring_emit(ring, cmd); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); + intel_ring_commit(ring); return 0; } @@ -124,13 +124,12 @@ gen4_render_ring_flush(struct intel_ring_buffer *ring, (IS_G4X(dev) || IS_GEN5(dev))) cmd |= MI_INVALIDATE_ISP; - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; intel_ring_emit(ring, cmd); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); return 0; } @@ -178,8 +177,7 @@ intel_emit_post_sync_nonzero_flush(struct intel_ring_buffer *ring) u32 scratch_addr = ring->scratch.gtt_offset + 128; int ret; - - ret = intel_ring_begin(ring, 6); + ret = intel_ring_get_space(ring, 6); if (ret) return ret; @@ -190,9 +188,8 @@ intel_emit_post_sync_nonzero_flush(struct intel_ring_buffer *ring) intel_ring_emit(ring, 0); /* low dword */ intel_ring_emit(ring, 0); /* high dword */ intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); - ret = intel_ring_begin(ring, 6); + ret = intel_ring_get_space(ring, 6); if (ret) return ret; @@ -202,7 +199,6 @@ intel_emit_post_sync_nonzero_flush(struct intel_ring_buffer *ring) intel_ring_emit(ring, 0); intel_ring_emit(ring, 0); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); return 0; } @@ -246,7 +242,7 @@ gen6_render_ring_flush(struct intel_ring_buffer *ring, flags |= PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_CS_STALL; } - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -254,7 +250,6 @@ gen6_render_ring_flush(struct intel_ring_buffer *ring, intel_ring_emit(ring, flags); intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); intel_ring_emit(ring, 0); - intel_ring_advance(ring); return 0; } @@ -264,7 +259,7 @@ gen7_render_ring_cs_stall_wa(struct intel_ring_buffer *ring) { int ret; - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -273,7 +268,6 @@ gen7_render_ring_cs_stall_wa(struct intel_ring_buffer *ring) PIPE_CONTROL_STALL_AT_SCOREBOARD); intel_ring_emit(ring, 0); intel_ring_emit(ring, 0); - intel_ring_advance(ring); return 0; } @@ -285,7 +279,7 @@ static int gen7_ring_fbc_flush(struct intel_ring_buffer *ring, u32 value) if (!ring->fbc_dirty) return 0; - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; intel_ring_emit(ring, MI_NOOP); @@ -293,7 +287,6 @@ static int gen7_ring_fbc_flush(struct intel_ring_buffer *ring, u32 value) intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1)); intel_ring_emit(ring, MSG_FBC_REND_STATE); intel_ring_emit(ring, value); - intel_ring_advance(ring); ring->fbc_dirty = false; return 0; @@ -344,7 +337,7 @@ gen7_render_ring_flush(struct intel_ring_buffer *ring, gen7_render_ring_cs_stall_wa(ring); } - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -352,7 +345,6 @@ gen7_render_ring_flush(struct intel_ring_buffer *ring, intel_ring_emit(ring, flags); intel_ring_emit(ring, scratch_addr); intel_ring_emit(ring, 0); - intel_ring_advance(ring); if (flush_domains) return gen7_ring_fbc_flush(ring, FBC_REND_NUKE); @@ -624,9 +616,8 @@ gen6_add_request(struct intel_ring_buffer *ring) struct intel_ring_buffer *useless; int i, ret; - ret = intel_ring_begin(ring, ((I915_NUM_RINGS-1) * - MBOX_UPDATE_DWORDS) + - 4); + ret = intel_ring_get_space(ring, + (I915_NUM_RINGS-1) * MBOX_UPDATE_DWORDS + 4); if (ret) return ret; #undef MBOX_UPDATE_DWORDS @@ -641,7 +632,7 @@ gen6_add_request(struct intel_ring_buffer *ring) intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); intel_ring_emit(ring, ring->outstanding_lazy_request); intel_ring_emit(ring, MI_USER_INTERRUPT); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; } @@ -679,7 +670,7 @@ gen6_ring_sync(struct intel_ring_buffer *waiter, WARN_ON(signaller->semaphore_register[waiter->id] == MI_SEMAPHORE_SYNC_INVALID); - ret = intel_ring_begin(waiter, 4); + ret = intel_ring_get_space(waiter, 4); if (ret) return ret; @@ -697,7 +688,6 @@ gen6_ring_sync(struct intel_ring_buffer *waiter, intel_ring_emit(waiter, MI_NOOP); intel_ring_emit(waiter, MI_NOOP); } - intel_ring_advance(waiter); return 0; } @@ -725,7 +715,7 @@ pc_render_add_request(struct intel_ring_buffer *ring) * incoherence by flushing the 6 PIPE_NOTIFY buffers out to * memory before requesting an interrupt. */ - ret = intel_ring_begin(ring, 32); + ret = intel_ring_get_space(ring, 32); if (ret) return ret; @@ -754,7 +744,7 @@ pc_render_add_request(struct intel_ring_buffer *ring) intel_ring_emit(ring, ring->scratch.gtt_offset | PIPE_CONTROL_GLOBAL_GTT); intel_ring_emit(ring, ring->outstanding_lazy_request); intel_ring_emit(ring, 0); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; } @@ -952,13 +942,12 @@ bsd_ring_flush(struct intel_ring_buffer *ring, { int ret; - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; intel_ring_emit(ring, MI_FLUSH); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); return 0; } @@ -967,7 +956,7 @@ i9xx_add_request(struct intel_ring_buffer *ring) { int ret; - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -975,7 +964,7 @@ i9xx_add_request(struct intel_ring_buffer *ring) intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); intel_ring_emit(ring, ring->outstanding_lazy_request); intel_ring_emit(ring, MI_USER_INTERRUPT); - __intel_ring_advance(ring); + intel_ring_commit(ring); return 0; } @@ -1076,7 +1065,7 @@ i965_dispatch_execbuffer(struct intel_ring_buffer *ring, { int ret; - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; @@ -1085,7 +1074,6 @@ i965_dispatch_execbuffer(struct intel_ring_buffer *ring, MI_BATCH_GTT | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965)); intel_ring_emit(ring, offset); - intel_ring_advance(ring); return 0; } @@ -1100,7 +1088,7 @@ i830_dispatch_execbuffer(struct intel_ring_buffer *ring, int ret; if (flags & I915_DISPATCH_PINNED) { - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -1108,14 +1096,13 @@ i830_dispatch_execbuffer(struct intel_ring_buffer *ring, intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE)); intel_ring_emit(ring, offset + len - 8); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); } else { u32 cs_offset = ring->scratch.gtt_offset; if (len > I830_BATCH_LIMIT) return -ENOSPC; - ret = intel_ring_begin(ring, 9+3); + ret = intel_ring_get_space(ring, 9+3); if (ret) return ret; /* Blit the batch (which has now all relocs applied) to the stable batch @@ -1137,7 +1124,6 @@ i830_dispatch_execbuffer(struct intel_ring_buffer *ring, intel_ring_emit(ring, MI_BATCH_BUFFER); intel_ring_emit(ring, cs_offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE)); intel_ring_emit(ring, cs_offset + len - 8); - intel_ring_advance(ring); } return 0; @@ -1150,13 +1136,12 @@ i915_dispatch_execbuffer(struct intel_ring_buffer *ring, { int ret; - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_GTT); intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE)); - intel_ring_advance(ring); return 0; } @@ -1423,7 +1408,7 @@ static int ring_wait_for_space(struct intel_ring_buffer *ring, int n) return ret; /* force the tail write in case we have been skipping them */ - __intel_ring_advance(ring); + intel_ring_commit(ring); trace_i915_ring_wait_begin(ring); /* With GEM the hangcheck timer should kick us out of the loop, @@ -1517,6 +1502,8 @@ static int __intel_ring_begin(struct intel_ring_buffer *ring, { int ret; + ring->tail &= ring->size - 1; + if (unlikely(ring->tail + bytes > ring->effective_size)) { ret = intel_wrap_ring_buffer(ring); if (unlikely(ret)) @@ -1533,8 +1520,8 @@ static int __intel_ring_begin(struct intel_ring_buffer *ring, return 0; } -int intel_ring_begin(struct intel_ring_buffer *ring, - int num_dwords) +int intel_ring_get_space(struct intel_ring_buffer *ring, + int num_dwords) { drm_i915_private_t *dev_priv = ring->dev->dev_private; int ret; @@ -1608,7 +1595,7 @@ static int gen6_bsd_ring_flush(struct intel_ring_buffer *ring, uint32_t cmd; int ret; - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -1626,7 +1613,7 @@ static int gen6_bsd_ring_flush(struct intel_ring_buffer *ring, intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT); intel_ring_emit(ring, 0); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); + return 0; } @@ -1637,7 +1624,7 @@ hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, { int ret; - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; @@ -1646,7 +1633,6 @@ hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_HSW)); /* bit0-7 is the length on GEN6+ */ intel_ring_emit(ring, offset); - intel_ring_advance(ring); return 0; } @@ -1658,7 +1644,7 @@ gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, { int ret; - ret = intel_ring_begin(ring, 2); + ret = intel_ring_get_space(ring, 2); if (ret) return ret; @@ -1667,7 +1653,6 @@ gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring, (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965)); /* bit0-7 is the length on GEN6+ */ intel_ring_emit(ring, offset); - intel_ring_advance(ring); return 0; } @@ -1681,7 +1666,7 @@ static int gen6_ring_flush(struct intel_ring_buffer *ring, uint32_t cmd; int ret; - ret = intel_ring_begin(ring, 4); + ret = intel_ring_get_space(ring, 4); if (ret) return ret; @@ -1699,7 +1684,6 @@ static int gen6_ring_flush(struct intel_ring_buffer *ring, intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT); intel_ring_emit(ring, 0); intel_ring_emit(ring, MI_NOOP); - intel_ring_advance(ring); if (IS_GEN7(dev) && flush) return gen7_ring_fbc_flush(ring, FBC_REND_CACHE_CLEAN); diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index 17b147a..183b560 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h @@ -232,18 +232,14 @@ intel_write_status_page(struct intel_ring_buffer *ring, void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring); -int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n); +int __must_check intel_ring_get_space(struct intel_ring_buffer *ring, int dwords); static inline void intel_ring_emit(struct intel_ring_buffer *ring, u32 data) { iowrite32(data, ring->virtual_start + ring->tail); ring->tail += 4; } -static inline void intel_ring_advance(struct intel_ring_buffer *ring) -{ - ring->tail &= ring->size - 1; -} -void __intel_ring_advance(struct intel_ring_buffer *ring); +void intel_ring_commit(struct intel_ring_buffer *ring); int __must_check intel_ring_idle(struct intel_ring_buffer *ring); void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno); -- 1.7.9.5 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx