[Intel-gfx] [PATCH 44/49] drm/i915: The argument for postfix is redundant
Chris Wilson
chris at chris-wilson.co.uk
Fri Mar 27 04:02:16 PDT 2015
We are conservative on the amount of free space available in the ring to
avoid overruning the potential MI_INTERRUPT after the seqno write.
Further undermining the justification for the change was that it was
applied incorrectly.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_drv.h | 14 ++------------
drivers/gpu/drm/i915/i915_gem.c | 11 ++---------
drivers/gpu/drm/i915/i915_gpu_error.c | 2 +-
drivers/gpu/drm/i915/intel_lrc.c | 6 ++----
drivers/gpu/drm/i915/intel_ringbuffer.c | 2 +-
5 files changed, 8 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 0d61215f2817..8d6827347fef 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2055,18 +2055,8 @@ struct drm_i915_gem_request {
/** GEM sequence number associated with this request. */
uint32_t seqno;
- /** Position in the ringbuffer of the start of the request */
- u32 head;
-
- /**
- * Position in the ringbuffer of the start of the postfix.
- * This is required to calculate the maximum available ringbuffer
- * space without overwriting the postfix.
- */
- u32 postfix;
-
- /** Position in the ringbuffer of the end of the whole request */
- u32 tail;
+ /** Position in the ringbuffer of the request */
+ u32 head, tail;
/**
* Context and ring buffer related to this request
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index abd858701307..5fef69b2ce9f 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1369,7 +1369,7 @@ __i915_gem_request_retire__upto(struct drm_i915_gem_request *rq)
if (list_empty(&rq->list))
return;
- rq->ringbuf->last_retired_head = rq->postfix;
+ rq->ringbuf->last_retired_head = rq->tail;
do {
struct drm_i915_gem_request *prev =
@@ -2439,13 +2439,6 @@ int __i915_add_request(struct intel_engine_cs *ring,
return ret;
}
- /* Record the position of the start of the request so that
- * should we detect the updated seqno part-way through the
- * GPU processing the request, we never over-estimate the
- * position of the head.
- */
- request->postfix = intel_ring_get_tail(ringbuf);
-
if (i915.enable_execlists) {
ret = ring->emit_request(ringbuf, request);
if (ret)
@@ -2747,7 +2740,7 @@ i915_gem_retire_requests_ring(struct intel_engine_cs *ring)
* of tail of the request to update the last known position
* of the GPU head.
*/
- request->ringbuf->last_retired_head = request->postfix;
+ request->ringbuf->last_retired_head = request->tail;
i915_gem_request_retire(request);
}
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index 8832f1b2a495..b7a00e464ba4 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -1072,7 +1072,7 @@ static void i915_gem_record_rings(struct drm_device *dev,
erq = &error->ring[i].requests[count++];
erq->seqno = request->seqno;
erq->jiffies = request->emitted_jiffies;
- erq->tail = request->postfix;
+ erq->tail = request->tail;
}
}
}
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 940dbaece3ae..8fa44c3e8c3c 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -407,7 +407,6 @@ void intel_lrc_irq_handler(struct intel_engine_cs *ring)
static int execlists_context_queue(struct intel_engine_cs *ring,
struct intel_context *to,
- u32 tail,
struct drm_i915_gem_request *request)
{
if (WARN_ON(request == NULL))
@@ -419,8 +418,6 @@ static int execlists_context_queue(struct intel_engine_cs *ring,
i915_gem_request_reference(request);
WARN_ON(to != request->ctx);
- request->tail = tail;
-
spin_lock_irq(&ring->execlist_lock);
list_add_tail(&request->execlist_link, &ring->execlist_queue);
@@ -696,7 +693,8 @@ intel_logical_ring_advance_and_submit(struct intel_ringbuffer *ringbuf,
if (intel_ring_stopped(ring))
return;
- execlists_context_queue(ring, ctx, ringbuf->tail, request);
+ request->tail = ringbuf->tail;
+ execlists_context_queue(ring, ctx, request);
}
static int intel_lr_context_pin(struct intel_engine_cs *ring,
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 6003e13e05b6..f44e7be17104 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -2106,7 +2106,7 @@ static int ring_wait_for_space(struct intel_engine_cs *ring, int n)
return 0;
list_for_each_entry(request, &ring->request_list, list) {
- space = __intel_ring_space(request->postfix, ringbuf->tail,
+ space = __intel_ring_space(request->tail, ringbuf->tail,
ringbuf->size);
if (space >= n)
break;
--
2.1.4
More information about the Intel-gfx
mailing list