generic-poky/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-mem-info.p...

141 lines
4.1 KiB
Diff

From 5deab387f5b9ec79a6bf7edc52b0653c2a6d44b5 Mon Sep 17 00:00:00 2001
From: Alan Olsen <alan.r.olsen@intel.com>
Date: Fri, 11 Sep 2009 15:57:46 -0700
Subject: [PATCH] linux-2.6.31-drm-mem-info.patch
Signed-off-by: Alan Olsen <alan.r.olsen@intel.com>
---
drivers/gpu/drm/Makefile | 4 +++
drivers/gpu/drm/drm_info.c | 58 ++++++++++++++++++++++++++++++++++++++++++++
drivers/gpu/drm/drm_proc.c | 2 +
include/drm/drmP.h | 2 +
4 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index fe23f29..d76f167 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -4,6 +4,10 @@
ccflags-y := -Iinclude/drm
+ifeq ($(CONFIG_DRM_PSB),y)
+ ccflags-y += -Idrivers/gpu/drm/psb
+endif
+
drm-y := drm_auth.o drm_bufs.o drm_cache.o \
drm_context.o drm_dma.o drm_drawable.o \
drm_drv.o drm_fops.o drm_gem.o drm_ioctl.o drm_irq.o \
diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
index f0f6c6b..0ecc778 100644
--- a/drivers/gpu/drm/drm_info.c
+++ b/drivers/gpu/drm/drm_info.c
@@ -36,6 +36,10 @@
#include <linux/seq_file.h>
#include "drmP.h"
+#ifdef CONFIG_DRM_PSB
+#include "psb/psb_drv.h"
+#endif
+
/**
* Called when "/proc/dri/.../name" is read.
*
@@ -211,6 +215,33 @@ int drm_vblank_info(struct seq_file *m, void *data)
return 0;
}
+int drm_gem_object_mem_info(int id, void *ptr, void *data)
+{
+ struct drm_gem_object *obj = ptr;
+ struct seq_file *m = data;
+
+ seq_printf(m, "object 0x%p name %2d memory %8zd\n",
+ obj, obj->name, obj->size);
+
+ return 0;
+}
+
+int drm_gem_clients_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_file *priv;
+
+ mutex_lock(&dev->struct_mutex);
+ list_for_each_entry(priv, &dev->filelist, lhead) {
+ seq_printf(m, "pid %5d \n", priv->pid);
+ idr_for_each(&priv->object_idr, &drm_gem_object_mem_info, m);
+ seq_printf(m, "\n");
+ }
+ mutex_unlock(&dev->struct_mutex);
+ return 0;
+}
+
/**
* Called when "/proc/dri/.../clients" is read.
*
@@ -273,6 +304,33 @@ int drm_gem_object_info(struct seq_file *m, void* data)
return 0;
}
+#ifdef CONFIG_DRM_PSB
+int drm_ttm_mem_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;
+
+ if (!strncmp("psb", dev->devname, 3)) {
+ struct ttm_bo_device *bdev = &psb_priv(dev)->bdev;
+ struct ttm_mem_global *glob = bdev->mem_glob;
+
+ spin_lock(&glob->lock);
+ seq_printf(m, "used memory %llu \n", glob->used_memory);
+ seq_printf(m, "used total memory %llu \n", glob->used_total_memory);
+ spin_unlock(&glob->lock);
+ } else {
+ seq_printf(m, "This is not a PSB device, no ttm mem info available\n");
+ }
+ return 0;
+}
+#else
+int drm_ttm_mem_info(struct seq_file *m, void* data)
+{
+ seq_printf(m, "ttm is not used\n");
+ return 0;
+}
+#endif
+
#if DRM_DEBUG_CODE
int drm_vma_info(struct seq_file *m, void *data)
diff --git a/drivers/gpu/drm/drm_proc.c b/drivers/gpu/drm/drm_proc.c
index bbd4b3d..26e64ec 100644
--- a/drivers/gpu/drm/drm_proc.c
+++ b/drivers/gpu/drm/drm_proc.c
@@ -55,6 +55,8 @@ static struct drm_info_list drm_proc_list[] = {
{"bufs", drm_bufs_info, 0},
{"gem_names", drm_gem_name_info, DRIVER_GEM},
{"gem_objects", drm_gem_object_info, DRIVER_GEM},
+ {"gem_clients", drm_gem_clients_info, DRIVER_GEM},
+ {"ttm_meminfo", drm_ttm_mem_info, 0},
#if DRM_DEBUG_CODE
{"vma", drm_vma_info, 0},
#endif
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index dbd40f1..5575b9a 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1355,6 +1355,8 @@ extern int drm_vblank_info(struct seq_file *m, void *data);
extern int drm_clients_info(struct seq_file *m, void* data);
extern int drm_gem_name_info(struct seq_file *m, void *data);
extern int drm_gem_object_info(struct seq_file *m, void* data);
+extern int drm_gem_clients_info(struct seq_file *m, void *data);
+extern int drm_ttm_mem_info(struct seq_file *m, void* data);
#if DRM_DEBUG_CODE
extern int drm_vma_info(struct seq_file *m, void *data);
--
1.6.0.6