Commit be26a10b authored by Zou Nan hai's avatar Zou Nan hai Committed by Eric Anholt

drm/i915: Fix incorrect intel_ring_begin size in BSD ringbuffer.

The ring_begin API was taking a number of bytes, while all of our
other begin/end macros take number of dwords.  Change the API over to
dwords to prevent future bugs.
Signed-off-by: default avatarZou Nan hai <nanhai.zou@intel.com>
Signed-off-by: default avatarEric Anholt <eric@anholt.net>
parent 45ac22c8
...@@ -1075,7 +1075,7 @@ extern int intel_trans_dp_port_sel (struct drm_crtc *crtc); ...@@ -1075,7 +1075,7 @@ extern int intel_trans_dp_port_sel (struct drm_crtc *crtc);
drm_i915_private_t *dev_priv = dev->dev_private; \ drm_i915_private_t *dev_priv = dev->dev_private; \
if (I915_VERBOSE) \ if (I915_VERBOSE) \
DRM_DEBUG(" BEGIN_LP_RING %x\n", (int)(n)); \ DRM_DEBUG(" BEGIN_LP_RING %x\n", (int)(n)); \
intel_ring_begin(dev, &dev_priv->render_ring, 4*(n)); \ intel_ring_begin(dev, &dev_priv->render_ring, (n)); \
} while (0) } while (0)
......
...@@ -94,7 +94,7 @@ render_ring_flush(struct drm_device *dev, ...@@ -94,7 +94,7 @@ render_ring_flush(struct drm_device *dev,
#if WATCH_EXEC #if WATCH_EXEC
DRM_INFO("%s: queue flush %08x to ring\n", __func__, cmd); DRM_INFO("%s: queue flush %08x to ring\n", __func__, cmd);
#endif #endif
intel_ring_begin(dev, ring, 8); intel_ring_begin(dev, ring, 2);
intel_ring_emit(dev, ring, cmd); intel_ring_emit(dev, ring, cmd);
intel_ring_emit(dev, ring, MI_NOOP); intel_ring_emit(dev, ring, MI_NOOP);
intel_ring_advance(dev, ring); intel_ring_advance(dev, ring);
...@@ -358,7 +358,7 @@ bsd_ring_flush(struct drm_device *dev, ...@@ -358,7 +358,7 @@ bsd_ring_flush(struct drm_device *dev,
u32 invalidate_domains, u32 invalidate_domains,
u32 flush_domains) u32 flush_domains)
{ {
intel_ring_begin(dev, ring, 8); intel_ring_begin(dev, ring, 2);
intel_ring_emit(dev, ring, MI_FLUSH); intel_ring_emit(dev, ring, MI_FLUSH);
intel_ring_emit(dev, ring, MI_NOOP); intel_ring_emit(dev, ring, MI_NOOP);
intel_ring_advance(dev, ring); intel_ring_advance(dev, ring);
...@@ -721,8 +721,9 @@ int intel_wait_ring_buffer(struct drm_device *dev, ...@@ -721,8 +721,9 @@ int intel_wait_ring_buffer(struct drm_device *dev,
} }
void intel_ring_begin(struct drm_device *dev, void intel_ring_begin(struct drm_device *dev,
struct intel_ring_buffer *ring, int n) struct intel_ring_buffer *ring, int num_dwords)
{ {
int n = 4*num_dwords;
if (unlikely(ring->tail + n > ring->size)) if (unlikely(ring->tail + n > ring->size))
intel_wrap_ring_buffer(dev, ring); intel_wrap_ring_buffer(dev, ring);
if (unlikely(ring->space < n)) if (unlikely(ring->space < n))
...@@ -752,7 +753,7 @@ void intel_fill_struct(struct drm_device *dev, ...@@ -752,7 +753,7 @@ void intel_fill_struct(struct drm_device *dev,
{ {
unsigned int *virt = ring->virtual_start + ring->tail; unsigned int *virt = ring->virtual_start + ring->tail;
BUG_ON((len&~(4-1)) != 0); BUG_ON((len&~(4-1)) != 0);
intel_ring_begin(dev, ring, len); intel_ring_begin(dev, ring, len/4);
memcpy(virt, data, len); memcpy(virt, data, len);
ring->tail += len; ring->tail += len;
ring->tail &= ring->size - 1; ring->tail &= ring->size - 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment