On 5/5/25 00:41, T.J. Mercier wrote: > Expose the debugfs list and mutex so they are usable for the creation of > a BPF iterator for dmabufs without the need for CONFIG_DEBUG_FS. Rename > the symbols so it's clear debugfs is not required, and that the list > contains dmabufs and not some other type. > > Signed-off-by: T.J. Mercier <tjmerc...@google.com>
Reviewed-by: Christian König <christian.koe...@amd.com> > --- > v2: Make the DMA buffer list independent of CONFIG_DEBUG_FS per Christian > König > drivers/dma-buf/dma-buf.c | 40 +++++++++++++++------------------------ > include/linux/dma-buf.h | 6 ++++-- > 2 files changed, 19 insertions(+), 27 deletions(-) > > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > index 5baa83b85515..7260bdd77c75 100644 > --- a/drivers/dma-buf/dma-buf.c > +++ b/drivers/dma-buf/dma-buf.c > @@ -35,35 +35,25 @@ > > static inline int is_dma_buf_file(struct file *); > > -#if IS_ENABLED(CONFIG_DEBUG_FS) > -static DEFINE_MUTEX(debugfs_list_mutex); > -static LIST_HEAD(debugfs_list); > +DEFINE_MUTEX(dmabuf_list_mutex); > +LIST_HEAD(dmabuf_list); > > -static void __dma_buf_debugfs_list_add(struct dma_buf *dmabuf) > +static void __dma_buf_list_add(struct dma_buf *dmabuf) > { > - mutex_lock(&debugfs_list_mutex); > - list_add(&dmabuf->list_node, &debugfs_list); > - mutex_unlock(&debugfs_list_mutex); > + mutex_lock(&dmabuf_list_mutex); > + list_add(&dmabuf->list_node, &dmabuf_list); > + mutex_unlock(&dmabuf_list_mutex); > } > > -static void __dma_buf_debugfs_list_del(struct dma_buf *dmabuf) > +static void __dma_buf_list_del(struct dma_buf *dmabuf) > { > if (!dmabuf) > return; > > - mutex_lock(&debugfs_list_mutex); > + mutex_lock(&dmabuf_list_mutex); > list_del(&dmabuf->list_node); > - mutex_unlock(&debugfs_list_mutex); > + mutex_unlock(&dmabuf_list_mutex); > } > -#else > -static void __dma_buf_debugfs_list_add(struct dma_buf *dmabuf) > -{ > -} > - > -static void __dma_buf_debugfs_list_del(struct dma_buf *dmabuf) > -{ > -} > -#endif > > static char *dmabuffs_dname(struct dentry *dentry, char *buffer, int buflen) > { > @@ -115,7 +105,7 @@ static int dma_buf_file_release(struct inode *inode, > struct file *file) > if (!is_dma_buf_file(file)) > return -EINVAL; > > - __dma_buf_debugfs_list_del(file->private_data); > + __dma_buf_list_del(file->private_data); > > return 0; > } > @@ -689,7 +679,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; > > - __dma_buf_debugfs_list_add(dmabuf); > + __dma_buf_list_add(dmabuf); > > return dmabuf; > > @@ -1630,7 +1620,7 @@ static int dma_buf_debug_show(struct seq_file *s, void > *unused) > size_t size = 0; > int ret; > > - ret = mutex_lock_interruptible(&debugfs_list_mutex); > + ret = mutex_lock_interruptible(&dmabuf_list_mutex); > > if (ret) > return ret; > @@ -1639,7 +1629,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, &debugfs_list, list_node) { > + list_for_each_entry(buf_obj, &dmabuf_list, list_node) { > > ret = dma_resv_lock_interruptible(buf_obj->resv, NULL); > if (ret) > @@ -1676,11 +1666,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(&debugfs_list_mutex); > + mutex_unlock(&dmabuf_list_mutex); > return 0; > > error_unlock: > - mutex_unlock(&debugfs_list_mutex); > + mutex_unlock(&dmabuf_list_mutex); > return ret; > } > > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h > index 36216d28d8bd..ebcd208272bf 100644 > --- a/include/linux/dma-buf.h > +++ b/include/linux/dma-buf.h > @@ -18,6 +18,7 @@ > #include <linux/err.h> > #include <linux/scatterlist.h> > #include <linux/list.h> > +#include <linux/mutex.h> > #include <linux/dma-mapping.h> > #include <linux/fs.h> > #include <linux/dma-fence.h> > @@ -370,10 +371,8 @@ 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; > @@ -556,6 +555,9 @@ struct dma_buf_export_info { > struct dma_buf_export_info name = { .exp_name = KBUILD_MODNAME, \ > .owner = THIS_MODULE } > > +extern struct list_head dmabuf_list; > +extern struct mutex dmabuf_list_mutex; > + > /** > * get_dma_buf - convenience wrapper for get_file. > * @dmabuf: [in] pointer to dma_buf