From: Dave Airlie <airl...@linux.ie>

This adds code to the drm_mm to talk to debugfs, and adds
support to radeon to add the VRAM and GTT mm lists to debugfs.

It allows you to see the used and free lists.

Signed-off-by: Dave Airlie <airl...@redhat.com>
---
 drivers/gpu/drm/drm_mm.c            |   23 ++++++++++++++++++++
 drivers/gpu/drm/radeon/radeon_ttm.c |   39 +++++++++++++++++++++++++++++++++++
 include/drm/drm_mm.h                |    4 +++
 3 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 3e47869..f251e7e 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -44,6 +44,7 @@
 #include "drmP.h"
 #include "drm_mm.h"
 #include <linux/slab.h>
+#include <linux/seq_file.h>
 
 #define MM_UNUSED_TARGET 4
 
@@ -370,3 +371,25 @@ void drm_mm_takedown(struct drm_mm * mm)
        BUG_ON(mm->num_unused != 0);
 }
 EXPORT_SYMBOL(drm_mm_takedown);
+
+#if defined(CONFIG_DEBUG_FS)
+int drm_mm_dump_table(struct seq_file *m, void *data)
+{
+       struct drm_info_node *node = (struct drm_info_node *)m->private;
+       struct drm_mm *mm = (struct drm_mm *)node->info_ent->data;
+       const struct list_head *free_stack = &mm->fl_entry;
+       struct drm_mm_node *entry;
+
+       spin_lock(&mm->unused_lock);
+       
+       seq_printf(m, "Used list:\n");
+       list_for_each_entry(entry, &mm->ml_entry, ml_entry)
+               seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx\n", entry->start, 
entry->start+entry->size, entry->size);
+       seq_printf(m, "\nFree list:\n");
+       list_for_each_entry(entry, free_stack, fl_entry)
+               seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx\n", entry->start, 
entry->start+entry->size, entry->size);
+       spin_unlock(&mm->unused_lock);
+       return 0;
+}
+EXPORT_SYMBOL(drm_mm_dump_table);
+#endif
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c 
b/drivers/gpu/drm/radeon/radeon_ttm.c
index 0a85e7b..aaa1ebd 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -40,6 +40,8 @@
 
 #define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT)
 
+static int radeon_ttm_debugfs_init(struct radeon_device *rdev);
+
 static struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
 {
        struct radeon_mman *mman;
@@ -504,6 +506,12 @@ int radeon_ttm_init(struct radeon_device *rdev)
        if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) {
                rdev->mman.bdev.dev_mapping = rdev->ddev->dev_mapping;
        }
+
+       r = radeon_ttm_debugfs_init(rdev);
+       if (r) {
+               DRM_ERROR("Failed to init debugfs\n");
+               return r;
+       }
        return 0;
 }
 
@@ -678,3 +686,34 @@ struct ttm_backend *radeon_ttm_backend_create(struct 
radeon_device *rdev)
        gtt->bound = false;
        return &gtt->backend;
 }
+
+#define RADEON_DEBUGFS_MEM_TYPES 2
+
+static struct drm_info_list radeon_mem_types_list[RADEON_DEBUGFS_MEM_TYPES];
+static char radeon_mem_types_names[RADEON_DEBUGFS_MEM_TYPES][32];
+
+static int radeon_ttm_debugfs_init(struct radeon_device *rdev)
+{
+#if defined(CONFIG_DEBUG_FS)
+       unsigned i;
+
+
+       for (i = 0; i < RADEON_DEBUGFS_MEM_TYPES; i++) {
+               if (i == 0)
+                       sprintf(radeon_mem_types_names[i], "radeon_vram_mm");
+               else
+                       sprintf(radeon_mem_types_names[i], "radeon_gtt_mm");
+               radeon_mem_types_list[i].name = radeon_mem_types_names[i];
+               radeon_mem_types_list[i].show = &drm_mm_dump_table;
+               radeon_mem_types_list[i].driver_features = 0;
+               if (i == 0)
+                       radeon_mem_types_list[i].data = 
&rdev->mman.bdev.man[TTM_PL_VRAM].manager;
+               else
+                       radeon_mem_types_list[i].data = 
&rdev->mman.bdev.man[TTM_PL_TT].manager;
+
+       }
+       return radeon_debugfs_add_files(rdev, radeon_mem_types_list, 
RADEON_DEBUGFS_MEM_TYPES);
+                                       
+#endif
+       return 0;
+}
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
index f833207..7055014 100644
--- a/include/drm/drm_mm.h
+++ b/include/drm/drm_mm.h
@@ -96,4 +96,8 @@ static inline struct drm_mm *drm_get_mm(struct drm_mm_node 
*block)
        return block->mm;
 }
 
+#ifdef CONFIG_DEBUG_FS
+int drm_mm_dump_table(struct seq_file *m, void *data);
+#endif
+
 #endif
-- 
1.6.4


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to