drm/i915: Record AGP memory type upon error
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 9 Jan 2011 21:07:49 +0000 (21:07 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Jan 2011 22:16:56 +0000 (22:16 +0000)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/i915_debugfs.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_irq.c

index a7c194a837a3a89c49ce265d74e285d54cb03da1..73914d84185671f33b7bae146293601e630fa3ad 100644 (file)
@@ -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)
 {
        if (pinned > 0)
@@ -662,7 +671,7 @@ static void print_error_buffers(struct seq_file *m,
        seq_printf(m, "%s [%d]:\n", name, 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->size,
                           err->read_domains,
@@ -672,7 +681,8 @@ static void print_error_buffers(struct seq_file *m,
                           tiling_flag(err->tiling),
                           dirty_flag(err->dirty),
                           purgeable_flag(err->purgeable),
-                          ring_str(err->ring));
+                          ring_str(err->ring),
+                          agp_type_str(err->agp_type));
 
                if (err->name)
                        seq_printf(m, " (name: %d)", err->name);
index 6c9a042737d6bc93e147e36a30218ede4daf7874..6130f77c26bf9db7651823b91b4ea0d02cebcb8b 100644 (file)
@@ -174,18 +174,19 @@ struct drm_i915_error_state {
                u32 *pages[0];
        } *ringbuffer, *batchbuffer[I915_NUM_RINGS];
        struct drm_i915_error_buffer {
-               size_t size;
+               u32 size;
                u32 name;
                u32 seqno;
                u32 gtt_offset;
                u32 read_domains;
                u32 write_domain;
-               u32 fence_reg;
+               s32 fence_reg:5;
                s32 pinned:2;
                u32 tiling:2;
                u32 dirty:1;
                u32 purgeable:1;
                u32 ring:4;
+               u32 agp_type:1;
        } *active_bo, *pinned_bo;
        u32 active_bo_count, pinned_bo_count;
        struct intel_overlay_error_state *overlay;
index cf61235b858f4d0f14d3239dbfa989af4f4ad115..e418e8bb61e66f4de9baadaafa23c3a286cb00f4 100644 (file)
@@ -665,6 +665,7 @@ static u32 capture_bo_list(struct drm_i915_error_buffer *err,
                err->dirty = obj->dirty;
                err->purgeable = obj->madv != I915_MADV_WILLNEED;
                err->ring = obj->ring ? obj->ring->id : 0;
+               err->agp_type = obj->agp_type == AGP_USER_CACHED_MEMORY;
 
                if (++i == count)
                        break;