diff options
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 21 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.h | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index b7f1742caf87..31b36c5ac894 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
| @@ -1653,6 +1653,27 @@ int intel_ring_begin(struct intel_ring_buffer *ring, | |||
| 1653 | return 0; | 1653 | return 0; |
| 1654 | } | 1654 | } |
| 1655 | 1655 | ||
| 1656 | /* Align the ring tail to a cacheline boundary */ | ||
| 1657 | int intel_ring_cacheline_align(struct intel_ring_buffer *ring) | ||
| 1658 | { | ||
| 1659 | int num_dwords = (64 - (ring->tail & 63)) / sizeof(uint32_t); | ||
| 1660 | int ret; | ||
| 1661 | |||
| 1662 | if (num_dwords == 0) | ||
| 1663 | return 0; | ||
| 1664 | |||
| 1665 | ret = intel_ring_begin(ring, num_dwords); | ||
| 1666 | if (ret) | ||
| 1667 | return ret; | ||
| 1668 | |||
| 1669 | while (num_dwords--) | ||
| 1670 | intel_ring_emit(ring, MI_NOOP); | ||
| 1671 | |||
| 1672 | intel_ring_advance(ring); | ||
| 1673 | |||
| 1674 | return 0; | ||
| 1675 | } | ||
| 1676 | |||
| 1656 | void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno) | 1677 | void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno) |
| 1657 | { | 1678 | { |
| 1658 | struct drm_i915_private *dev_priv = ring->dev->dev_private; | 1679 | struct drm_i915_private *dev_priv = ring->dev->dev_private; |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index 71a73f4fe252..0b243ce33714 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h | |||
| @@ -233,6 +233,7 @@ intel_write_status_page(struct intel_ring_buffer *ring, | |||
| 233 | void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring); | 233 | void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring); |
| 234 | 234 | ||
| 235 | int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n); | 235 | int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n); |
| 236 | int __must_check intel_ring_cacheline_align(struct intel_ring_buffer *ring); | ||
| 236 | static inline void intel_ring_emit(struct intel_ring_buffer *ring, | 237 | static inline void intel_ring_emit(struct intel_ring_buffer *ring, |
| 237 | u32 data) | 238 | u32 data) |
| 238 | { | 239 | { |
