diff options
Diffstat (limited to 'drivers/dma-buf/dma-buf.c')
| -rw-r--r-- | drivers/dma-buf/dma-buf.c | 56 | 
1 files changed, 34 insertions, 22 deletions
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index 8fe5aa67b167..8892bc701a66 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -35,12 +35,35 @@  static inline int is_dma_buf_file(struct file *); -struct dma_buf_list { -	struct list_head head; -	struct mutex lock; -}; +#if IS_ENABLED(CONFIG_DEBUG_FS) +static DEFINE_MUTEX(debugfs_list_mutex); +static LIST_HEAD(debugfs_list); -static struct dma_buf_list db_list; +static void __dma_buf_debugfs_list_add(struct dma_buf *dmabuf) +{ +	mutex_lock(&debugfs_list_mutex); +	list_add(&dmabuf->list_node, &debugfs_list); +	mutex_unlock(&debugfs_list_mutex); +} + +static void __dma_buf_debugfs_list_del(struct dma_buf *dmabuf) +{ +	if (!dmabuf) +		return; + +	mutex_lock(&debugfs_list_mutex); +	list_del(&dmabuf->list_node); +	mutex_unlock(&debugfs_list_mutex); +} +#else +static void __dma_buf_debugfs_list_add(struct dma_buf *dmabuf) +{ +} + +static void __dma_buf_debugfs_list_del(struct file *file) +{ +} +#endif  static char *dmabuffs_dname(struct dentry *dentry, char *buffer, int buflen)  { @@ -89,17 +112,10 @@ static void dma_buf_release(struct dentry *dentry)  static int dma_buf_file_release(struct inode *inode, struct file *file)  { -	struct dma_buf *dmabuf; -  	if (!is_dma_buf_file(file))  		return -EINVAL; -	dmabuf = file->private_data; -	if (dmabuf) { -		mutex_lock(&db_list.lock); -		list_del(&dmabuf->list_node); -		mutex_unlock(&db_list.lock); -	} +	__dma_buf_debugfs_list_del(file->private_data);  	return 0;  } @@ -672,9 +688,7 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)  	file->f_path.dentry->d_fsdata = dmabuf;  	dmabuf->file = file; -	mutex_lock(&db_list.lock); -	list_add(&dmabuf->list_node, &db_list.head); -	mutex_unlock(&db_list.lock); +	__dma_buf_debugfs_list_add(dmabuf);  	return dmabuf; @@ -1611,7 +1625,7 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)  	size_t size = 0;  	int ret; -	ret = mutex_lock_interruptible(&db_list.lock); +	ret = mutex_lock_interruptible(&debugfs_list_mutex);  	if (ret)  		return ret; @@ -1620,7 +1634,7 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)  	seq_printf(s, "%-8s\t%-8s\t%-8s\t%-8s\texp_name\t%-8s\tname\n",  		   "size", "flags", "mode", "count", "ino"); -	list_for_each_entry(buf_obj, &db_list.head, list_node) { +	list_for_each_entry(buf_obj, &debugfs_list, list_node) {  		ret = dma_resv_lock_interruptible(buf_obj->resv, NULL);  		if (ret) @@ -1657,11 +1671,11 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)  	seq_printf(s, "\nTotal %d objects, %zu bytes\n", count, size); -	mutex_unlock(&db_list.lock); +	mutex_unlock(&debugfs_list_mutex);  	return 0;  error_unlock: -	mutex_unlock(&db_list.lock); +	mutex_unlock(&debugfs_list_mutex);  	return ret;  } @@ -1718,8 +1732,6 @@ static int __init dma_buf_init(void)  	if (IS_ERR(dma_buf_mnt))  		return PTR_ERR(dma_buf_mnt); -	mutex_init(&db_list.lock); -	INIT_LIST_HEAD(&db_list.head);  	dma_buf_init_debugfs();  	return 0;  }  |