Commit a779e5ab authored by Chris Wilson's avatar Chris Wilson

drm/i915: Record AGP memory type upon error

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 0a58705b
...@@ -624,6 +624,15 @@ static const char *ring_str(int ring) ...@@ -624,6 +624,15 @@ static const char *ring_str(int ring)
} }
} }
static const char *agp_type_str(int type)
{
switch (type) {
case 0: return " uncached";
case 1: return " snooped";
default: return "";
}
}
static const char *pin_flag(int pinned) static const char *pin_flag(int pinned)
{ {
if (pinned > 0) if (pinned > 0)
...@@ -662,7 +671,7 @@ static void print_error_buffers(struct seq_file *m, ...@@ -662,7 +671,7 @@ static void print_error_buffers(struct seq_file *m,
seq_printf(m, "%s [%d]:\n", name, count); seq_printf(m, "%s [%d]:\n", name, count);
while (count--) { while (count--) {
seq_printf(m, " %08x %8zd %04x %04x %08x%s%s%s%s%s", seq_printf(m, " %08x %8zd %04x %04x %08x%s%s%s%s%s%s",
err->gtt_offset, err->gtt_offset,
err->size, err->size,
err->read_domains, err->read_domains,
...@@ -672,7 +681,8 @@ static void print_error_buffers(struct seq_file *m, ...@@ -672,7 +681,8 @@ static void print_error_buffers(struct seq_file *m,
tiling_flag(err->tiling), tiling_flag(err->tiling),
dirty_flag(err->dirty), dirty_flag(err->dirty),
purgeable_flag(err->purgeable), purgeable_flag(err->purgeable),
ring_str(err->ring)); ring_str(err->ring),
agp_type_str(err->agp_type));
if (err->name) if (err->name)
seq_printf(m, " (name: %d)", err->name); seq_printf(m, " (name: %d)", err->name);
......
...@@ -174,18 +174,19 @@ struct drm_i915_error_state { ...@@ -174,18 +174,19 @@ struct drm_i915_error_state {
u32 *pages[0]; u32 *pages[0];
} *ringbuffer, *batchbuffer[I915_NUM_RINGS]; } *ringbuffer, *batchbuffer[I915_NUM_RINGS];
struct drm_i915_error_buffer { struct drm_i915_error_buffer {
size_t size; u32 size;
u32 name; u32 name;
u32 seqno; u32 seqno;
u32 gtt_offset; u32 gtt_offset;
u32 read_domains; u32 read_domains;
u32 write_domain; u32 write_domain;
u32 fence_reg; s32 fence_reg:5;
s32 pinned:2; s32 pinned:2;
u32 tiling:2; u32 tiling:2;
u32 dirty:1; u32 dirty:1;
u32 purgeable:1; u32 purgeable:1;
u32 ring:4; u32 ring:4;
u32 agp_type:1;
} *active_bo, *pinned_bo; } *active_bo, *pinned_bo;
u32 active_bo_count, pinned_bo_count; u32 active_bo_count, pinned_bo_count;
struct intel_overlay_error_state *overlay; struct intel_overlay_error_state *overlay;
......
...@@ -665,6 +665,7 @@ static u32 capture_bo_list(struct drm_i915_error_buffer *err, ...@@ -665,6 +665,7 @@ static u32 capture_bo_list(struct drm_i915_error_buffer *err,
err->dirty = obj->dirty; err->dirty = obj->dirty;
err->purgeable = obj->madv != I915_MADV_WILLNEED; err->purgeable = obj->madv != I915_MADV_WILLNEED;
err->ring = obj->ring ? obj->ring->id : 0; err->ring = obj->ring ? obj->ring->id : 0;
err->agp_type = obj->agp_type == AGP_USER_CACHED_MEMORY;
if (++i == count) if (++i == count)
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment