diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index 71065b03012a..35bea250e08d 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -31,6 +31,9 @@ #include #include +#ifndef __GENKSYMS__ +#include +#endif #include #include "dma-buf-sysfs-stats.h" @@ -211,6 +214,7 @@ static int new_task_dmabuf_record(struct task_struct *task, struct dma_buf *dmab return -ENOMEM; dmabuf_info->rss += dmabuf->size; + trace_dmabuf_rss_stat(dmabuf_info->rss, dmabuf->size, dmabuf); /* * dmabuf_info->lock protects against concurrent writers, so no * worries about stale rss_hwm between the read and write, and we don't @@ -312,6 +316,7 @@ void dma_buf_unaccount_task(struct dma_buf *dmabuf, struct task_struct *task) list_del(&rec->node); kfree(rec); dmabuf_info->rss -= dmabuf->size; + trace_dmabuf_rss_stat(dmabuf_info->rss, -dmabuf->size, dmabuf); atomic64_dec(&get_dmabuf_ext(dmabuf)->num_unique_refs); } err: diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 68f5280a41a4..896f8de946d0 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h @@ -8,6 +8,7 @@ #include #include #include +#include TRACE_EVENT(kmem_cache_alloc, @@ -487,6 +488,30 @@ TRACE_EVENT(rss_stat, __print_symbolic(__entry->member, TRACE_MM_PAGES), __entry->size) ); + +TRACE_EVENT(dmabuf_rss_stat, + + TP_PROTO(size_t rss, ssize_t rss_delta, struct dma_buf *dmabuf), + + TP_ARGS(rss, rss_delta, dmabuf), + + TP_STRUCT__entry( + __field(size_t, rss) + __field(ssize_t, rss_delta) + __field(unsigned long, i_ino) + ), + + TP_fast_assign( + __entry->rss = rss; + __entry->rss_delta = rss_delta; + __entry->i_ino = file_inode(dmabuf->file)->i_ino; + ), + + TP_printk("rss=%zu delta=%zd i_ino=%lu", + __entry->rss, + __entry->rss_delta, + __entry->i_ino) + ); #endif /* _TRACE_KMEM_H */ /* This part must be outside protection */