提交 9075e52f 编写于 作者: O Oscar Mateo 提交者: Daniel Vetter

drm/i915/bdw: Make sure error capture keeps working with Execlists

Since the ringbuffer does not belong per engine anymore, we have to
make sure that we are always recording the correct ringbuffer.

TODO: This is only a small fix to keep basic error capture working, but
we need to add more information for it to be useful (e.g. dump the
context being executed).

v2: Reorder how the ringbuffer is chosen to clarify the change and
rename the variable, both changes suggested by Chris Wilson. Also,
add the TODO comment to the code, as suggested by Daniel.
Signed-off-by: NOscar Mateo <oscar.mateo@intel.com>
Reviewed-by: NDamien Lespiau <damien.lespiau@intel.com>
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 87a01e82
...@@ -912,9 +912,6 @@ static void i915_record_ring_state(struct drm_device *dev, ...@@ -912,9 +912,6 @@ static void i915_record_ring_state(struct drm_device *dev,
ering->hws = I915_READ(mmio); ering->hws = I915_READ(mmio);
} }
ering->cpu_ring_head = ring->buffer->head;
ering->cpu_ring_tail = ring->buffer->tail;
ering->hangcheck_score = ring->hangcheck.score; ering->hangcheck_score = ring->hangcheck.score;
ering->hangcheck_action = ring->hangcheck.action; ering->hangcheck_action = ring->hangcheck.action;
...@@ -977,6 +974,7 @@ static void i915_gem_record_rings(struct drm_device *dev, ...@@ -977,6 +974,7 @@ static void i915_gem_record_rings(struct drm_device *dev,
for (i = 0; i < I915_NUM_RINGS; i++) { for (i = 0; i < I915_NUM_RINGS; i++) {
struct intel_engine_cs *ring = &dev_priv->ring[i]; struct intel_engine_cs *ring = &dev_priv->ring[i];
struct intel_ringbuffer *rbuf;
error->ring[i].pid = -1; error->ring[i].pid = -1;
...@@ -1023,8 +1021,24 @@ static void i915_gem_record_rings(struct drm_device *dev, ...@@ -1023,8 +1021,24 @@ static void i915_gem_record_rings(struct drm_device *dev,
} }
} }
if (i915.enable_execlists) {
/* TODO: This is only a small fix to keep basic error
* capture working, but we need to add more information
* for it to be useful (e.g. dump the context being
* executed).
*/
if (request)
rbuf = request->ctx->engine[ring->id].ringbuf;
else
rbuf = ring->default_context->engine[ring->id].ringbuf;
} else
rbuf = ring->buffer;
error->ring[i].cpu_ring_head = rbuf->head;
error->ring[i].cpu_ring_tail = rbuf->tail;
error->ring[i].ringbuffer = error->ring[i].ringbuffer =
i915_error_ggtt_object_create(dev_priv, ring->buffer->obj); i915_error_ggtt_object_create(dev_priv, rbuf->obj);
error->ring[i].hws_page = error->ring[i].hws_page =
i915_error_ggtt_object_create(dev_priv, ring->status_page.obj); i915_error_ggtt_object_create(dev_priv, ring->status_page.obj);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册