Commit 3afff779 authored by Sean Anderson's avatar Sean Anderson Committed by Christoph Hellwig
Browse files

dma-mapping: trace dma_alloc/free direction



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: default avatarSean Anderson <sean.anderson@linux.dev>
Reviewed-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 5af5fc89
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -114,8 +114,9 @@ DEFINE_UNMAP_EVENT(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))
@@ -123,6 +124,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)
	),

@@ -135,8 +137,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,
@@ -146,14 +149,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)
	),

@@ -162,11 +166,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,
+4 −2
Original line number Diff line number Diff line
@@ -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);