Skip to content

Commit 3afff77

Browse files
Sean AndersonChristoph Hellwig
authored andcommitted
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: Sean Anderson <sean.anderson@linux.dev> Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Christoph Hellwig <hch@lst.de>
1 parent 5af5fc8 commit 3afff77

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

include/trace/events/dma.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,17 @@ DEFINE_UNMAP_EVENT(dma_unmap_resource);
114114

115115
TRACE_EVENT(dma_alloc,
116116
TP_PROTO(struct device *dev, void *virt_addr, dma_addr_t dma_addr,
117-
size_t size, gfp_t flags, unsigned long attrs),
118-
TP_ARGS(dev, virt_addr, dma_addr, size, flags, attrs),
117+
size_t size, enum dma_data_direction dir, gfp_t flags,
118+
unsigned long attrs),
119+
TP_ARGS(dev, virt_addr, dma_addr, size, dir, flags, attrs),
119120

120121
TP_STRUCT__entry(
121122
__string(device, dev_name(dev))
122123
__field(void *, virt_addr)
123124
__field(u64, dma_addr)
124125
__field(size_t, size)
125126
__field(gfp_t, flags)
127+
__field(enum dma_data_direction, dir)
126128
__field(unsigned long, attrs)
127129
),
128130

@@ -135,8 +137,9 @@ TRACE_EVENT(dma_alloc,
135137
__entry->attrs = attrs;
136138
),
137139

138-
TP_printk("%s dma_addr=%llx size=%zu virt_addr=%p flags=%s attrs=%s",
140+
TP_printk("%s dir=%s dma_addr=%llx size=%zu virt_addr=%p flags=%s attrs=%s",
139141
__get_str(device),
142+
decode_dma_data_direction(__entry->dir),
140143
__entry->dma_addr,
141144
__entry->size,
142145
__entry->virt_addr,
@@ -146,14 +149,15 @@ TRACE_EVENT(dma_alloc,
146149

147150
TRACE_EVENT(dma_free,
148151
TP_PROTO(struct device *dev, void *virt_addr, dma_addr_t dma_addr,
149-
size_t size, unsigned long attrs),
150-
TP_ARGS(dev, virt_addr, dma_addr, size, attrs),
152+
size_t size, enum dma_data_direction dir, unsigned long attrs),
153+
TP_ARGS(dev, virt_addr, dma_addr, size, dir, attrs),
151154

152155
TP_STRUCT__entry(
153156
__string(device, dev_name(dev))
154157
__field(void *, virt_addr)
155158
__field(u64, dma_addr)
156159
__field(size_t, size)
160+
__field(enum dma_data_direction, dir)
157161
__field(unsigned long, attrs)
158162
),
159163

@@ -162,11 +166,13 @@ TRACE_EVENT(dma_free,
162166
__entry->virt_addr = virt_addr;
163167
__entry->dma_addr = dma_addr;
164168
__entry->size = size;
169+
__entry->dir = dir;
165170
__entry->attrs = attrs;
166171
),
167172

168-
TP_printk("%s dma_addr=%llx size=%zu virt_addr=%p attrs=%s",
173+
TP_printk("%s dir=%s dma_addr=%llx size=%zu virt_addr=%p attrs=%s",
169174
__get_str(device),
175+
decode_dma_data_direction(__entry->dir),
170176
__entry->dma_addr,
171177
__entry->size,
172178
__entry->virt_addr,

kernel/dma/mapping.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,8 @@ void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
619619
else
620620
return NULL;
621621

622-
trace_dma_alloc(dev, cpu_addr, *dma_handle, size, flag, attrs);
622+
trace_dma_alloc(dev, cpu_addr, *dma_handle, size, DMA_BIDIRECTIONAL,
623+
flag, attrs);
623624
debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr, attrs);
624625
return cpu_addr;
625626
}
@@ -644,7 +645,8 @@ void dma_free_attrs(struct device *dev, size_t size, void *cpu_addr,
644645
if (!cpu_addr)
645646
return;
646647

647-
trace_dma_free(dev, cpu_addr, dma_handle, size, attrs);
648+
trace_dma_free(dev, cpu_addr, dma_handle, size, DMA_BIDIRECTIONAL,
649+
attrs);
648650
debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
649651
if (dma_alloc_direct(dev, ops))
650652
dma_direct_free(dev, size, cpu_addr, dma_handle, attrs);

0 commit comments

Comments
 (0)