提交 e2f973d5 编写于 作者: C Chris Wilson

drm/i915: Record all error ringbuffers

Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
上级 21dd3734
...@@ -805,15 +805,20 @@ static int i915_error_state(struct seq_file *m, void *unused) ...@@ -805,15 +805,20 @@ static int i915_error_state(struct seq_file *m, void *unused)
} }
} }
if (error->ringbuffer) { for (i = 0; i < ARRAY_SIZE(error->ringbuffer); i++) {
struct drm_i915_error_object *obj = error->ringbuffer; if (error->ringbuffer[i]) {
struct drm_i915_error_object *obj = error->ringbuffer[i];
seq_printf(m, "--- ringbuffer = 0x%08x\n", obj->gtt_offset); seq_printf(m, "%s --- ringbuffer = 0x%08x\n",
offset = 0; dev_priv->ring[i].name,
for (page = 0; page < obj->page_count; page++) { obj->gtt_offset);
for (elt = 0; elt < PAGE_SIZE/4; elt++) { offset = 0;
seq_printf(m, "%08x : %08x\n", offset, obj->pages[page][elt]); for (page = 0; page < obj->page_count; page++) {
offset += 4; for (elt = 0; elt < PAGE_SIZE/4; elt++) {
seq_printf(m, "%08x : %08x\n",
offset,
obj->pages[page][elt]);
offset += 4;
}
} }
} }
} }
......
...@@ -174,7 +174,7 @@ struct drm_i915_error_state { ...@@ -174,7 +174,7 @@ struct drm_i915_error_state {
int page_count; int page_count;
u32 gtt_offset; u32 gtt_offset;
u32 *pages[0]; u32 *pages[0];
} *ringbuffer, *batchbuffer[I915_NUM_RINGS]; } *ringbuffer[I915_NUM_RINGS], *batchbuffer[I915_NUM_RINGS];
struct drm_i915_error_buffer { struct drm_i915_error_buffer {
u32 size; u32 size;
u32 name; u32 name;
......
...@@ -648,9 +648,14 @@ static void ...@@ -648,9 +648,14 @@ static void
i915_error_state_free(struct drm_device *dev, i915_error_state_free(struct drm_device *dev,
struct drm_i915_error_state *error) struct drm_i915_error_state *error)
{ {
i915_error_object_free(error->batchbuffer[0]); int i;
i915_error_object_free(error->batchbuffer[1]);
i915_error_object_free(error->ringbuffer); for (i = 0; i < ARRAY_SIZE(error->batchbuffer); i++)
i915_error_object_free(error->batchbuffer[i]);
for (i = 0; i < ARRAY_SIZE(error->ringbuffer); i++)
i915_error_object_free(error->ringbuffer[i]);
kfree(error->active_bo); kfree(error->active_bo);
kfree(error->overlay); kfree(error->overlay);
kfree(error); kfree(error);
...@@ -824,15 +829,16 @@ static void i915_capture_error_state(struct drm_device *dev) ...@@ -824,15 +829,16 @@ static void i915_capture_error_state(struct drm_device *dev)
} }
i915_gem_record_fences(dev, error); i915_gem_record_fences(dev, error);
/* Record the active batchbuffers */ /* Record the active batch and ring buffers */
for (i = 0; i < I915_NUM_RINGS; i++) for (i = 0; i < I915_NUM_RINGS; i++) {
error->batchbuffer[i] = error->batchbuffer[i] =
i915_error_first_batchbuffer(dev_priv, i915_error_first_batchbuffer(dev_priv,
&dev_priv->ring[i]); &dev_priv->ring[i]);
/* Record the ringbuffer */ error->ringbuffer[i] =
error->ringbuffer = i915_error_object_create(dev_priv, i915_error_object_create(dev_priv,
dev_priv->ring[RCS].obj); dev_priv->ring[i].obj);
}
/* Record buffers on the active and pinned lists. */ /* Record buffers on the active and pinned lists. */
error->active_bo = NULL; error->active_bo = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册