drm/i915/debugfs: Show all objects in the gtt
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 10 Jan 2011 00:00:24 +0000 (00:00 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Jan 2011 22:16:56 +0000 (22:16 +0000)
Useful for determining the layout.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/i915_debugfs.c

index 73914d8..19a3d58 100644 (file)
@@ -106,10 +106,19 @@ static const char *get_tiling_flag(struct drm_i915_gem_object *obj)
     }
 }
 
+static const char *agp_type_str(int type)
+{
+       switch (type) {
+       case 0: return " uncached";
+       case 1: return " snooped";
+       default: return "";
+       }
+}
+
 static void
 describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
 {
-       seq_printf(m, "%p: %s%s %8zd %04x %04x %d %d%s%s",
+       seq_printf(m, "%p: %s%s %8zd %04x %04x %d %d%s%s%s",
                   &obj->base,
                   get_pin_flag(obj),
                   get_tiling_flag(obj),
@@ -118,6 +127,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
                   obj->base.write_domain,
                   obj->last_rendering_seqno,
                   obj->last_fenced_seqno,
+                  agp_type_str(obj->agp_type == AGP_USER_CACHED_MEMORY),
                   obj->dirty ? " dirty" : "",
                   obj->madv == I915_MADV_DONTNEED ? " purgeable" : "");
        if (obj->base.name)
@@ -276,6 +286,37 @@ static int i915_gem_object_info(struct seq_file *m, void* data)
        return 0;
 }
 
+static int i915_gem_gtt_info(struct seq_file *m, void* data)
+{
+       struct drm_info_node *node = (struct drm_info_node *) m->private;
+       struct drm_device *dev = node->minor->dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       struct drm_i915_gem_object *obj;
+       size_t total_obj_size, total_gtt_size;
+       int count, ret;
+
+       ret = mutex_lock_interruptible(&dev->struct_mutex);
+       if (ret)
+               return ret;
+
+       total_obj_size = total_gtt_size = count = 0;
+       list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+               seq_printf(m, "   ");
+               describe_obj(m, obj);
+               seq_printf(m, "\n");
+               total_obj_size += obj->base.size;
+               total_gtt_size += obj->gtt_space->size;
+               count++;
+       }
+
+       mutex_unlock(&dev->struct_mutex);
+
+       seq_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n",
+                  count, total_obj_size, total_gtt_size);
+
+       return 0;
+}
+
 
 static int i915_gem_pageflip_info(struct seq_file *m, void *data)
 {
@@ -624,15 +665,6 @@ 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)
@@ -1229,6 +1261,7 @@ static int i915_wedged_create(struct dentry *root, struct drm_minor *minor)
 static struct drm_info_list i915_debugfs_list[] = {
        {"i915_capabilities", i915_capabilities, 0, 0},
        {"i915_gem_objects", i915_gem_object_info, 0},
+       {"i915_gem_gtt", i915_gem_gtt_info, 0},
        {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST},
        {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST},
        {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST},