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: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Родитель
4bb1bedb28
Коммит
595e1eeb26
|
@ -597,33 +597,6 @@ DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
|
|||
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,
|
||||
TP_PROTO(int plane, struct drm_i915_gem_object *obj),
|
||||
|
||||
|
|
|
@ -647,8 +647,9 @@ int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int logical_ring_wait_request(struct intel_ringbuffer *ringbuf,
|
||||
int bytes)
|
||||
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_i915_gem_request *request;
|
||||
|
@ -674,7 +675,7 @@ static int logical_ring_wait_request(struct intel_ringbuffer *ringbuf,
|
|||
break;
|
||||
}
|
||||
|
||||
if (&request->list == &ring->request_list)
|
||||
if (WARN_ON(&request->list == &ring->request_list))
|
||||
return -ENOSPC;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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,
|
||||
struct intel_context *ctx)
|
||||
{
|
||||
|
|
|
@ -2060,7 +2060,7 @@ void intel_cleanup_ring_buffer(struct intel_engine_cs *ring)
|
|||
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 drm_i915_gem_request *request;
|
||||
|
@ -2076,7 +2076,7 @@ static int intel_ring_wait_request(struct intel_engine_cs *ring, int n)
|
|||
break;
|
||||
}
|
||||
|
||||
if (&request->list == &ring->request_list)
|
||||
if (WARN_ON(&request->list == &ring->request_list))
|
||||
return -ENOSPC;
|
||||
|
||||
ret = i915_wait_request(request);
|
||||
|
@ -2090,58 +2090,6 @@ static int intel_ring_wait_request(struct intel_engine_cs *ring, int n)
|
|||
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)
|
||||
{
|
||||
uint32_t __iomem *virt;
|
||||
|
|
Загрузка…
Ссылка в новой задаче