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

Commit 36620032 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Update ring position from request on retiring



When wedged, we do not update the ring->tail as we submit the requests
causing us to leak the ring->space upon cleaning up the wedged driver.
We can just use the value stored in rq->tail, and keep the submission
backend details away from set-wedge.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180307134226.25492-3-chris@chris-wilson.co.uk
parent 2d4ecace
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -358,7 +358,7 @@ static void advance_ring(struct i915_request *request)
		 * is just about to be. Either works, if we miss the last two
		 * is just about to be. Either works, if we miss the last two
		 * noops - they are safe to be replayed on a reset.
		 * noops - they are safe to be replayed on a reset.
		 */
		 */
		tail = READ_ONCE(request->ring->tail);
		tail = READ_ONCE(request->tail);
	} else {
	} else {
		tail = request->postfix;
		tail = request->postfix;
	}
	}
+1 −0
Original line number Original line Diff line number Diff line
@@ -1593,6 +1593,7 @@ static noinline int wait_for_space(struct intel_ring *ring, unsigned int bytes)
	if (intel_ring_update_space(ring) >= bytes)
	if (intel_ring_update_space(ring) >= bytes)
		return 0;
		return 0;


	GEM_BUG_ON(list_empty(&ring->request_list));
	list_for_each_entry(target, &ring->request_list, ring_link) {
	list_for_each_entry(target, &ring->request_list, ring_link) {
		/* Would completion of this request free enough space? */
		/* Would completion of this request free enough space? */
		if (bytes <= __intel_ring_space(target->postfix,
		if (bytes <= __intel_ring_space(target->postfix,