mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
dma-buf: Do not build debugfs related code when !CONFIG_DEBUG_FS
There is no point in compiling in the list and mutex operations which are only used from the dma-buf debugfs code, if debugfs is not compiled in. Put the code in questions behind some kconfig guards and so save some text and maybe even a pointer per object at runtime when not enabled. Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net> Cc: Sumit Semwal <sumit.semwal@linaro.org> Cc: Christian König <christian.koenig@amd.com> Cc: linux-media@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linaro-mm-sig@lists.linaro.org Cc: linux-kernel@vger.kernel.org Cc: kernel-dev@igalia.com Reviewed-by: T.J. Mercier <tjmercier@google.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Maíra Canal <mcanal@igalia.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240328145323.68872-1-tursulin@igalia.com
This commit is contained in:
parent
d894ea562f
commit
bfc7bc5393
@ -35,12 +35,35 @@
|
|||||||
|
|
||||||
static inline int is_dma_buf_file(struct file *);
|
static inline int is_dma_buf_file(struct file *);
|
||||||
|
|
||||||
struct dma_buf_list {
|
#if IS_ENABLED(CONFIG_DEBUG_FS)
|
||||||
struct list_head head;
|
static DEFINE_MUTEX(debugfs_list_mutex);
|
||||||
struct mutex lock;
|
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)
|
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)
|
static int dma_buf_file_release(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
struct dma_buf *dmabuf;
|
|
||||||
|
|
||||||
if (!is_dma_buf_file(file))
|
if (!is_dma_buf_file(file))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
dmabuf = file->private_data;
|
__dma_buf_debugfs_list_del(file->private_data);
|
||||||
if (dmabuf) {
|
|
||||||
mutex_lock(&db_list.lock);
|
|
||||||
list_del(&dmabuf->list_node);
|
|
||||||
mutex_unlock(&db_list.lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
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;
|
file->f_path.dentry->d_fsdata = dmabuf;
|
||||||
dmabuf->file = file;
|
dmabuf->file = file;
|
||||||
|
|
||||||
mutex_lock(&db_list.lock);
|
__dma_buf_debugfs_list_add(dmabuf);
|
||||||
list_add(&dmabuf->list_node, &db_list.head);
|
|
||||||
mutex_unlock(&db_list.lock);
|
|
||||||
|
|
||||||
return dmabuf;
|
return dmabuf;
|
||||||
|
|
||||||
@ -1611,7 +1625,7 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)
|
|||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = mutex_lock_interruptible(&db_list.lock);
|
ret = mutex_lock_interruptible(&debugfs_list_mutex);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return 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",
|
seq_printf(s, "%-8s\t%-8s\t%-8s\t%-8s\texp_name\t%-8s\tname\n",
|
||||||
"size", "flags", "mode", "count", "ino");
|
"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);
|
ret = dma_resv_lock_interruptible(buf_obj->resv, NULL);
|
||||||
if (ret)
|
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);
|
seq_printf(s, "\nTotal %d objects, %zu bytes\n", count, size);
|
||||||
|
|
||||||
mutex_unlock(&db_list.lock);
|
mutex_unlock(&debugfs_list_mutex);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_unlock:
|
error_unlock:
|
||||||
mutex_unlock(&db_list.lock);
|
mutex_unlock(&debugfs_list_mutex);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1718,8 +1732,6 @@ static int __init dma_buf_init(void)
|
|||||||
if (IS_ERR(dma_buf_mnt))
|
if (IS_ERR(dma_buf_mnt))
|
||||||
return PTR_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();
|
dma_buf_init_debugfs();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -370,8 +370,10 @@ struct dma_buf {
|
|||||||
*/
|
*/
|
||||||
struct module *owner;
|
struct module *owner;
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_DEBUG_FS)
|
||||||
/** @list_node: node for dma_buf accounting and debugging. */
|
/** @list_node: node for dma_buf accounting and debugging. */
|
||||||
struct list_head list_node;
|
struct list_head list_node;
|
||||||
|
#endif
|
||||||
|
|
||||||
/** @priv: exporter specific private data for this buffer object. */
|
/** @priv: exporter specific private data for this buffer object. */
|
||||||
void *priv;
|
void *priv;
|
||||||
|
Loading…
Reference in New Issue
Block a user