Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96f298aa authored by Ben Widawsky's avatar Ben Widawsky Committed by Keith Packard
Browse files

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: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 2c34b850
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -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,
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
+6 −0
Original line number Original line Diff line number Diff line
@@ -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,