drm/i915: Record all error ringbuffers
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Родитель
21dd373486
Коммит
e2f973d58e
|
@ -805,15 +805,20 @@ static int i915_error_state(struct seq_file *m, void *unused)
|
|||
}
|
||||
}
|
||||
|
||||
if (error->ringbuffer) {
|
||||
struct drm_i915_error_object *obj = error->ringbuffer;
|
||||
|
||||
seq_printf(m, "--- ringbuffer = 0x%08x\n", obj->gtt_offset);
|
||||
offset = 0;
|
||||
for (page = 0; page < obj->page_count; page++) {
|
||||
for (elt = 0; elt < PAGE_SIZE/4; elt++) {
|
||||
seq_printf(m, "%08x : %08x\n", offset, obj->pages[page][elt]);
|
||||
offset += 4;
|
||||
for (i = 0; i < ARRAY_SIZE(error->ringbuffer); i++) {
|
||||
if (error->ringbuffer[i]) {
|
||||
struct drm_i915_error_object *obj = error->ringbuffer[i];
|
||||
seq_printf(m, "%s --- ringbuffer = 0x%08x\n",
|
||||
dev_priv->ring[i].name,
|
||||
obj->gtt_offset);
|
||||
offset = 0;
|
||||
for (page = 0; page < obj->page_count; page++) {
|
||||
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 {
|
|||
int page_count;
|
||||
u32 gtt_offset;
|
||||
u32 *pages[0];
|
||||
} *ringbuffer, *batchbuffer[I915_NUM_RINGS];
|
||||
} *ringbuffer[I915_NUM_RINGS], *batchbuffer[I915_NUM_RINGS];
|
||||
struct drm_i915_error_buffer {
|
||||
u32 size;
|
||||
u32 name;
|
||||
|
|
|
@ -648,9 +648,14 @@ static void
|
|||
i915_error_state_free(struct drm_device *dev,
|
||||
struct drm_i915_error_state *error)
|
||||
{
|
||||
i915_error_object_free(error->batchbuffer[0]);
|
||||
i915_error_object_free(error->batchbuffer[1]);
|
||||
i915_error_object_free(error->ringbuffer);
|
||||
int i;
|
||||
|
||||
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->overlay);
|
||||
kfree(error);
|
||||
|
@ -824,15 +829,16 @@ static void i915_capture_error_state(struct drm_device *dev)
|
|||
}
|
||||
i915_gem_record_fences(dev, error);
|
||||
|
||||
/* Record the active batchbuffers */
|
||||
for (i = 0; i < I915_NUM_RINGS; i++)
|
||||
/* Record the active batch and ring buffers */
|
||||
for (i = 0; i < I915_NUM_RINGS; i++) {
|
||||
error->batchbuffer[i] =
|
||||
i915_error_first_batchbuffer(dev_priv,
|
||||
&dev_priv->ring[i]);
|
||||
|
||||
/* Record the ringbuffer */
|
||||
error->ringbuffer = i915_error_object_create(dev_priv,
|
||||
dev_priv->ring[RCS].obj);
|
||||
error->ringbuffer[i] =
|
||||
i915_error_object_create(dev_priv,
|
||||
dev_priv->ring[i].obj);
|
||||
}
|
||||
|
||||
/* Record buffers on the active and pinned lists. */
|
||||
error->active_bo = NULL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче