diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_gem.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_gem.c | 50 | 
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index fe5c1f6b795..aa796031ab6 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c @@ -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; +}  |