On Sat, Apr 17, 2021 at 01:54:08PM +0200, Christian König wrote: > Am 17.04.21 um 13:20 schrieb Peter.Enderborg@xxxxxxxx: > > On 4/17/21 12:59 PM, Christian König wrote: > > > Am 17.04.21 um 12:40 schrieb Peter Enderborg: > > > > This adds a total used dma-buf memory. Details > > > > can be found in debugfs, however it is not for everyone > > > > and not always available. dma-buf are indirect allocated by > > > > userspace. So with this value we can monitor and detect > > > > userspace applications that have problems. > > > > > > > > Signed-off-by: Peter Enderborg <peter.enderborg@xxxxxxxx> > > > Reviewed-by: Christian König <christian.koenig@xxxxxxx> > > > > > > How do you want to upstream this? > > I don't understand that question. The patch applies on Torvalds 5.12-rc7, > > but I guess 5.13 is what we work on right now. > > Yeah, but how do you want to get it into Linus tree? > > I can push it together with other DMA-buf patches through drm-misc-next and > then Dave will send it to Linus for inclusion in 5.13. Small correction, we've already frozen for the merge window so this will land in 5.14. -Daniel > > But could be that you are pushing multiple changes towards Linus through > some other branch. In this case I'm fine if you pick that way instead if you > want to keep your patches together for some reason. > > Christian. > > > > > > > --- > > > > drivers/dma-buf/dma-buf.c | 13 +++++++++++++ > > > > fs/proc/meminfo.c | 5 ++++- > > > > include/linux/dma-buf.h | 1 + > > > > 3 files changed, 18 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > > > > index f264b70c383e..197e5c45dd26 100644 > > > > --- a/drivers/dma-buf/dma-buf.c > > > > +++ b/drivers/dma-buf/dma-buf.c > > > > @@ -37,6 +37,7 @@ struct dma_buf_list { > > > > }; > > > > static struct dma_buf_list db_list; > > > > +static atomic_long_t dma_buf_global_allocated; > > > > static char *dmabuffs_dname(struct dentry *dentry, char *buffer, int buflen) > > > > { > > > > @@ -79,6 +80,7 @@ static void dma_buf_release(struct dentry *dentry) > > > > if (dmabuf->resv == (struct dma_resv *)&dmabuf[1]) > > > > dma_resv_fini(dmabuf->resv); > > > > + atomic_long_sub(dmabuf->size, &dma_buf_global_allocated); > > > > module_put(dmabuf->owner); > > > > kfree(dmabuf->name); > > > > kfree(dmabuf); > > > > @@ -586,6 +588,7 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info) > > > > mutex_lock(&db_list.lock); > > > > list_add(&dmabuf->list_node, &db_list.head); > > > > mutex_unlock(&db_list.lock); > > > > + atomic_long_add(dmabuf->size, &dma_buf_global_allocated); > > > > return dmabuf; > > > > @@ -1346,6 +1349,16 @@ void dma_buf_vunmap(struct dma_buf *dmabuf, struct dma_buf_map *map) > > > > } > > > > EXPORT_SYMBOL_GPL(dma_buf_vunmap); > > > > +/** > > > > + * dma_buf_allocated_pages - Return the used nr of pages > > > > + * allocated for dma-buf > > > > + */ > > > > +long dma_buf_allocated_pages(void) > > > > +{ > > > > + return atomic_long_read(&dma_buf_global_allocated) >> PAGE_SHIFT; > > > > +} > > > > +EXPORT_SYMBOL_GPL(dma_buf_allocated_pages); > > > > + > > > > #ifdef CONFIG_DEBUG_FS > > > > static int dma_buf_debug_show(struct seq_file *s, void *unused) > > > > { > > > > diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c > > > > index 6fa761c9cc78..ccc7c40c8db7 100644 > > > > --- a/fs/proc/meminfo.c > > > > +++ b/fs/proc/meminfo.c > > > > @@ -16,6 +16,7 @@ > > > > #ifdef CONFIG_CMA > > > > #include <linux/cma.h> > > > > #endif > > > > +#include <linux/dma-buf.h> > > > > #include <asm/page.h> > > > > #include "internal.h" > > > > @@ -145,7 +146,9 @@ static int meminfo_proc_show(struct seq_file *m, void *v) > > > > show_val_kb(m, "CmaFree: ", > > > > global_zone_page_state(NR_FREE_CMA_PAGES)); > > > > #endif > > > > - > > > > +#ifdef CONFIG_DMA_SHARED_BUFFER > > > > + show_val_kb(m, "DmaBufTotal: ", dma_buf_allocated_pages()); > > > > +#endif > > > > hugetlb_report_meminfo(m); > > > > arch_report_meminfo(m); > > > > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h > > > > index efdc56b9d95f..5b05816bd2cd 100644 > > > > --- a/include/linux/dma-buf.h > > > > +++ b/include/linux/dma-buf.h > > > > @@ -507,4 +507,5 @@ int dma_buf_mmap(struct dma_buf *, struct vm_area_struct *, > > > > unsigned long); > > > > int dma_buf_vmap(struct dma_buf *dmabuf, struct dma_buf_map *map); > > > > void dma_buf_vunmap(struct dma_buf *dmabuf, struct dma_buf_map *map); > > > > +long dma_buf_allocated_pages(void); > > > > #endif /* __DMA_BUF_H__ */ > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch