drm/1915: ringbuffer wait for idle function
Added a new function which waits for the ringbuffer space to be equal to (total - 8). This is the empty condition of the ringbuffer, and equivalent to head==tail. Also modified two users of this functionality elsewhere in the code. Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
2c34b850ee
commit
96f298aa9c
3 changed files with 8 additions and 2 deletions
|
@ -571,7 +571,7 @@ static int i915_quiescent(struct drm_device *dev)
|
||||||
struct intel_ring_buffer *ring = LP_RING(dev->dev_private);
|
struct intel_ring_buffer *ring = LP_RING(dev->dev_private);
|
||||||
|
|
||||||
i915_kernel_lost_context(dev);
|
i915_kernel_lost_context(dev);
|
||||||
return intel_wait_ring_buffer(ring, ring->size - 8);
|
return intel_wait_ring_idle(ring);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int i915_flush_ioctl(struct drm_device *dev, void *data,
|
static int i915_flush_ioctl(struct drm_device *dev, void *data,
|
||||||
|
|
|
@ -873,7 +873,7 @@ void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
|
||||||
|
|
||||||
/* Disable the ring buffer. The ring must be idle at this point */
|
/* Disable the ring buffer. The ring must be idle at this point */
|
||||||
dev_priv = ring->dev->dev_private;
|
dev_priv = ring->dev->dev_private;
|
||||||
ret = intel_wait_ring_buffer(ring, ring->size - 8);
|
ret = intel_wait_ring_idle(ring);
|
||||||
if (ret)
|
if (ret)
|
||||||
DRM_ERROR("failed to quiesce %s whilst cleaning up: %d\n",
|
DRM_ERROR("failed to quiesce %s whilst cleaning up: %d\n",
|
||||||
ring->name, ret);
|
ring->name, ret);
|
||||||
|
|
|
@ -164,7 +164,13 @@ intel_read_status_page(struct intel_ring_buffer *ring,
|
||||||
#define I915_BREADCRUMB_INDEX 0x21
|
#define I915_BREADCRUMB_INDEX 0x21
|
||||||
|
|
||||||
void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring);
|
void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring);
|
||||||
|
|
||||||
int __must_check intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n);
|
int __must_check intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n);
|
||||||
|
static inline int intel_wait_ring_idle(struct intel_ring_buffer *ring)
|
||||||
|
{
|
||||||
|
return intel_wait_ring_buffer(ring, ring->space - 8);
|
||||||
|
}
|
||||||
|
|
||||||
int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n);
|
int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n);
|
||||||
|
|
||||||
static inline void intel_ring_emit(struct intel_ring_buffer *ring,
|
static inline void intel_ring_emit(struct intel_ring_buffer *ring,
|
||||||
|
|
Reference in a new issue