Skip to content

Commit

Permalink
dma-buf: Do not build debugfs related code when !CONFIG_DEBUG_FS
Browse files Browse the repository at this point in the history
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
  • Loading branch information
tursulin authored and mairacanal committed Apr 15, 2024
1 parent d894ea5 commit bfc7bc5
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 22 deletions.
56 changes: 34 additions & 22 deletions drivers/dma-buf/dma-buf.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand All @@ -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)
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}
Expand Down
2 changes: 2 additions & 0 deletions include/linux/dma-buf.h
Original file line number Diff line number Diff line change
Expand Up @@ -370,8 +370,10 @@ struct dma_buf {
*/
struct module *owner;

#if IS_ENABLED(CONFIG_DEBUG_FS)
/** @list_node: node for dma_buf accounting and debugging. */
struct list_head list_node;
#endif

/** @priv: exporter specific private data for this buffer object. */
void *priv;
Expand Down

0 comments on commit bfc7bc5

Please sign in to comment.