|
@@ -84,6 +84,7 @@ retry:
|
|
|
return r;
|
|
|
}
|
|
|
*obj = &robj->gem_base;
|
|
|
+ robj->pid = task_pid_nr(current);
|
|
|
|
|
|
mutex_lock(&rdev->gem.mutex);
|
|
|
list_add_tail(&robj->list, &rdev->gem.objects);
|
|
@@ -575,3 +576,52 @@ int radeon_mode_dumb_destroy(struct drm_file *file_priv,
|
|
|
{
|
|
|
return drm_gem_handle_delete(file_priv, handle);
|
|
|
}
|
|
|
+
|
|
|
+#if defined(CONFIG_DEBUG_FS)
|
|
|
+static int radeon_debugfs_gem_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 radeon_device *rdev = dev->dev_private;
|
|
|
+ struct radeon_bo *rbo;
|
|
|
+ unsigned i = 0;
|
|
|
+
|
|
|
+ mutex_lock(&rdev->gem.mutex);
|
|
|
+ list_for_each_entry(rbo, &rdev->gem.objects, list) {
|
|
|
+ unsigned domain;
|
|
|
+ const char *placement;
|
|
|
+
|
|
|
+ domain = radeon_mem_type_to_domain(rbo->tbo.mem.mem_type);
|
|
|
+ switch (domain) {
|
|
|
+ case RADEON_GEM_DOMAIN_VRAM:
|
|
|
+ placement = "VRAM";
|
|
|
+ break;
|
|
|
+ case RADEON_GEM_DOMAIN_GTT:
|
|
|
+ placement = " GTT";
|
|
|
+ break;
|
|
|
+ case RADEON_GEM_DOMAIN_CPU:
|
|
|
+ default:
|
|
|
+ placement = " CPU";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ seq_printf(m, "bo[0x%08x] %8ldkB %8ldMB %s pid %8ld\n",
|
|
|
+ i, radeon_bo_size(rbo) >> 10, radeon_bo_size(rbo) >> 20,
|
|
|
+ placement, (unsigned long)rbo->pid);
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ mutex_unlock(&rdev->gem.mutex);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct drm_info_list radeon_debugfs_gem_list[] = {
|
|
|
+ {"radeon_gem_info", &radeon_debugfs_gem_info, 0, NULL},
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
+int radeon_gem_debugfs_init(struct radeon_device *rdev)
|
|
|
+{
|
|
|
+#if defined(CONFIG_DEBUG_FS)
|
|
|
+ return radeon_debugfs_add_files(rdev, radeon_debugfs_gem_list, 1);
|
|
|
+#endif
|
|
|
+ return 0;
|
|
|
+}
|