Commit 595e1eeb authored by Chris Wilson's avatar Chris Wilson Committed by Daniel Vetter
Browse files

drm/i915: Remove vestigal DRI1 ring quiescing code



After the removal of DRI1, all access to the rings are through requests
and so we can always be sure that there is a request to wait upon to
free up available space. The fallback code only existed so that we could
quiesce the GPU following unmediated access by DRI1.

v2: Rebase

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 4bb1bedb
Loading
Loading
Loading
Loading
+0 −27
Original line number Original line Diff line number Diff line
@@ -597,33 +597,6 @@ DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
	    TP_ARGS(req)
	    TP_ARGS(req)
);
);


DECLARE_EVENT_CLASS(i915_ring,
	    TP_PROTO(struct intel_engine_cs *ring),
	    TP_ARGS(ring),

	    TP_STRUCT__entry(
			     __field(u32, dev)
			     __field(u32, ring)
			     ),

	    TP_fast_assign(
			   __entry->dev = ring->dev->primary->index;
			   __entry->ring = ring->id;
			   ),

	    TP_printk("dev=%u, ring=%u", __entry->dev, __entry->ring)
);

DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
	    TP_PROTO(struct intel_engine_cs *ring),
	    TP_ARGS(ring)
);

DEFINE_EVENT(i915_ring, i915_ring_wait_end,
	    TP_PROTO(struct intel_engine_cs *ring),
	    TP_ARGS(ring)
);

TRACE_EVENT(i915_flip_request,
TRACE_EVENT(i915_flip_request,
	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),


+4 −53
Original line number Original line Diff line number Diff line
@@ -647,7 +647,8 @@ int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request
	return 0;
	return 0;
}
}


static int logical_ring_wait_request(struct intel_ringbuffer *ringbuf,
static int logical_ring_wait_for_space(struct intel_ringbuffer *ringbuf,
				       struct intel_context *ctx,
				       int bytes)
				       int bytes)
{
{
	struct intel_engine_cs *ring = ringbuf->ring;
	struct intel_engine_cs *ring = ringbuf->ring;
@@ -674,7 +675,7 @@ static int logical_ring_wait_request(struct intel_ringbuffer *ringbuf,
			break;
			break;
	}
	}


	if (&request->list == &ring->request_list)
	if (WARN_ON(&request->list == &ring->request_list))
		return -ENOSPC;
		return -ENOSPC;


	ret = i915_wait_request(request);
	ret = i915_wait_request(request);
@@ -712,56 +713,6 @@ intel_logical_ring_advance_and_submit(struct intel_ringbuffer *ringbuf,
	execlists_context_queue(ring, ctx, ringbuf->tail, request);
	execlists_context_queue(ring, ctx, ringbuf->tail, request);
}
}


static int logical_ring_wait_for_space(struct intel_ringbuffer *ringbuf,
				       struct intel_context *ctx,
				       int bytes)
{
	struct intel_engine_cs *ring = ringbuf->ring;
	struct drm_device *dev = ring->dev;
	struct drm_i915_private *dev_priv = dev->dev_private;
	unsigned long end;
	int ret;

	ret = logical_ring_wait_request(ringbuf, bytes);
	if (ret != -ENOSPC)
		return ret;

	/* Force the context submission in case we have been skipping it */
	intel_logical_ring_advance_and_submit(ringbuf, ctx, NULL);

	/* With GEM the hangcheck timer should kick us out of the loop,
	 * leaving it early runs the risk of corrupting GEM state (due
	 * to running on almost untested codepaths). But on resume
	 * timers don't work yet, so prevent a complete hang in that
	 * case by choosing an insanely large timeout. */
	end = jiffies + 60 * HZ;

	ret = 0;
	do {
		if (intel_ring_space(ringbuf) >= bytes)
			break;

		msleep(1);

		if (dev_priv->mm.interruptible && signal_pending(current)) {
			ret = -ERESTARTSYS;
			break;
		}

		ret = i915_gem_check_wedge(&dev_priv->gpu_error,
					   dev_priv->mm.interruptible);
		if (ret)
			break;

		if (time_after(jiffies, end)) {
			ret = -EBUSY;
			break;
		}
	} while (1);

	return ret;
}

static int logical_ring_wrap_buffer(struct intel_ringbuffer *ringbuf,
static int logical_ring_wrap_buffer(struct intel_ringbuffer *ringbuf,
				    struct intel_context *ctx)
				    struct intel_context *ctx)
{
{
+2 −54
Original line number Original line Diff line number Diff line
@@ -2060,7 +2060,7 @@ void intel_cleanup_ring_buffer(struct intel_engine_cs *ring)
	ring->buffer = NULL;
	ring->buffer = NULL;
}
}


static int intel_ring_wait_request(struct intel_engine_cs *ring, int n)
static int ring_wait_for_space(struct intel_engine_cs *ring, int n)
{
{
	struct intel_ringbuffer *ringbuf = ring->buffer;
	struct intel_ringbuffer *ringbuf = ring->buffer;
	struct drm_i915_gem_request *request;
	struct drm_i915_gem_request *request;
@@ -2076,7 +2076,7 @@ static int intel_ring_wait_request(struct intel_engine_cs *ring, int n)
			break;
			break;
	}
	}


	if (&request->list == &ring->request_list)
	if (WARN_ON(&request->list == &ring->request_list))
		return -ENOSPC;
		return -ENOSPC;


	ret = i915_wait_request(request);
	ret = i915_wait_request(request);
@@ -2090,58 +2090,6 @@ static int intel_ring_wait_request(struct intel_engine_cs *ring, int n)
	return 0;
	return 0;
}
}


static int ring_wait_for_space(struct intel_engine_cs *ring, int n)
{
	struct drm_device *dev = ring->dev;
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct intel_ringbuffer *ringbuf = ring->buffer;
	unsigned long end;
	int ret;

	ret = intel_ring_wait_request(ring, n);
	if (ret != -ENOSPC)
		return ret;

	/* force the tail write in case we have been skipping them */
	__intel_ring_advance(ring);

	/* With GEM the hangcheck timer should kick us out of the loop,
	 * leaving it early runs the risk of corrupting GEM state (due
	 * to running on almost untested codepaths). But on resume
	 * timers don't work yet, so prevent a complete hang in that
	 * case by choosing an insanely large timeout. */
	end = jiffies + 60 * HZ;

	ret = 0;
	trace_i915_ring_wait_begin(ring);
	do {
		if (intel_ring_space(ringbuf) >= n)
			break;
		ringbuf->head = I915_READ_HEAD(ring);
		if (intel_ring_space(ringbuf) >= n)
			break;

		msleep(1);

		if (dev_priv->mm.interruptible && signal_pending(current)) {
			ret = -ERESTARTSYS;
			break;
		}

		ret = i915_gem_check_wedge(&dev_priv->gpu_error,
					   dev_priv->mm.interruptible);
		if (ret)
			break;

		if (time_after(jiffies, end)) {
			ret = -EBUSY;
			break;
		}
	} while (1);
	trace_i915_ring_wait_end(ring);
	return ret;
}

static int intel_wrap_ring_buffer(struct intel_engine_cs *ring)
static int intel_wrap_ring_buffer(struct intel_engine_cs *ring)
{
{
	uint32_t __iomem *virt;
	uint32_t __iomem *virt;