Message ID | 20250504224149.1033867-2-tjmercier@google.com |
---|---|
State | Superseded |
Headers | show |
Series | Replace CONFIG_DMABUF_SYSFS_STATS with BPF | expand |
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 <tjmercier@google.com> Reviewed-by: Christian König <christian.koenig@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
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
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 <tjmercier@google.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(-)