summaryrefslogtreecommitdiffstats
path: root/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-mem-info.patch
blob: 3b9463f01d45101ccfe33a3d0dbd43d5598c4fa4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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