]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dma-mapping: trace dma_alloc/free direction
authorSean Anderson <sean.anderson@linux.dev>
Fri, 18 Oct 2024 15:00:35 +0000 (11:00 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Sep 2025 14:35:41 +0000 (16:35 +0200)
[ Upstream commit 3afff779a725cba914e6caba360b696ae6f90249 ]

In preparation for using these tracepoints in a few more places, trace
the DMA direction as well. For coherent allocations this is always
bidirectional.

Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Stable-dep-of: 7e2368a21741 ("dma-debug: don't enforce dma mapping check on noncoherent allocations")
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/trace/events/dma.h
kernel/dma/mapping.c

index b0f41265191c398ad98db665ffa29662495aa974..012729cc178f094051f5b7256d9b18cf0396a005 100644 (file)
@@ -116,8 +116,9 @@ DEFINE_EVENT(dma_unmap, dma_unmap_resource,
 
 TRACE_EVENT(dma_alloc,
        TP_PROTO(struct device *dev, void *virt_addr, dma_addr_t dma_addr,
-                size_t size, gfp_t flags, unsigned long attrs),
-       TP_ARGS(dev, virt_addr, dma_addr, size, flags, attrs),
+                size_t size, enum dma_data_direction dir, gfp_t flags,
+                unsigned long attrs),
+       TP_ARGS(dev, virt_addr, dma_addr, size, dir, flags, attrs),
 
        TP_STRUCT__entry(
                __string(device, dev_name(dev))
@@ -125,6 +126,7 @@ TRACE_EVENT(dma_alloc,
                __field(u64, dma_addr)
                __field(size_t, size)
                __field(gfp_t, flags)
+               __field(enum dma_data_direction, dir)
                __field(unsigned long, attrs)
        ),
 
@@ -137,8 +139,9 @@ TRACE_EVENT(dma_alloc,
                __entry->attrs = attrs;
        ),
 
-       TP_printk("%s dma_addr=%llx size=%zu virt_addr=%p flags=%s attrs=%s",
+       TP_printk("%s dir=%s dma_addr=%llx size=%zu virt_addr=%p flags=%s attrs=%s",
                __get_str(device),
+               decode_dma_data_direction(__entry->dir),
                __entry->dma_addr,
                __entry->size,
                __entry->virt_addr,
@@ -148,14 +151,15 @@ TRACE_EVENT(dma_alloc,
 
 TRACE_EVENT(dma_free,
        TP_PROTO(struct device *dev, void *virt_addr, dma_addr_t dma_addr,
-                size_t size, unsigned long attrs),
-       TP_ARGS(dev, virt_addr, dma_addr, size, attrs),
+                size_t size, enum dma_data_direction dir, unsigned long attrs),
+       TP_ARGS(dev, virt_addr, dma_addr, size, dir, attrs),
 
        TP_STRUCT__entry(
                __string(device, dev_name(dev))
                __field(void *, virt_addr)
                __field(u64, dma_addr)
                __field(size_t, size)
+               __field(enum dma_data_direction, dir)
                __field(unsigned long, attrs)
        ),
 
@@ -164,11 +168,13 @@ TRACE_EVENT(dma_free,
                __entry->virt_addr = virt_addr;
                __entry->dma_addr = dma_addr;
                __entry->size = size;
+               __entry->dir = dir;
                __entry->attrs = attrs;
        ),
 
-       TP_printk("%s dma_addr=%llx size=%zu virt_addr=%p attrs=%s",
+       TP_printk("%s dir=%s dma_addr=%llx size=%zu virt_addr=%p attrs=%s",
                __get_str(device),
+               decode_dma_data_direction(__entry->dir),
                __entry->dma_addr,
                __entry->size,
                __entry->virt_addr,
index 74d453ec750a113efe132495502bcc725204db53..9720f3c157d9f05593f6934142c0a9b1cbe2872c 100644 (file)
@@ -619,7 +619,8 @@ void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
        else
                return NULL;
 
-       trace_dma_alloc(dev, cpu_addr, *dma_handle, size, flag, attrs);
+       trace_dma_alloc(dev, cpu_addr, *dma_handle, size, DMA_BIDIRECTIONAL,
+                       flag, attrs);
        debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr, attrs);
        return cpu_addr;
 }
@@ -644,7 +645,8 @@ void dma_free_attrs(struct device *dev, size_t size, void *cpu_addr,
        if (!cpu_addr)
                return;
 
-       trace_dma_free(dev, cpu_addr, dma_handle, size, attrs);
+       trace_dma_free(dev, cpu_addr, dma_handle, size, DMA_BIDIRECTIONAL,
+                      attrs);
        debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
        if (dma_alloc_direct(dev, ops))
                dma_direct_free(dev, size, cpu_addr, dma_handle, attrs);