@@ -112,7 +112,7 @@ DEFINE_EVENT(dma_unmap, name, \
112
112
DEFINE_UNMAP_EVENT (dma_unmap_page );
113
113
DEFINE_UNMAP_EVENT (dma_unmap_resource );
114
114
115
- TRACE_EVENT ( dma_alloc ,
115
+ DECLARE_EVENT_CLASS ( dma_alloc_class ,
116
116
TP_PROTO (struct device * dev , void * virt_addr , dma_addr_t dma_addr ,
117
117
size_t size , enum dma_data_direction dir , gfp_t flags ,
118
118
unsigned long attrs ),
@@ -147,7 +147,58 @@ TRACE_EVENT(dma_alloc,
147
147
decode_dma_attrs (__entry -> attrs ))
148
148
);
149
149
150
- TRACE_EVENT (dma_free ,
150
+ #define DEFINE_ALLOC_EVENT (name ) \
151
+ DEFINE_EVENT(dma_alloc_class, name, \
152
+ TP_PROTO(struct device *dev, void *virt_addr, dma_addr_t dma_addr, \
153
+ size_t size, enum dma_data_direction dir, gfp_t flags, \
154
+ unsigned long attrs), \
155
+ TP_ARGS(dev, virt_addr, dma_addr, size, dir, flags, attrs))
156
+
157
+ DEFINE_ALLOC_EVENT (dma_alloc );
158
+ DEFINE_ALLOC_EVENT (dma_alloc_pages );
159
+
160
+ TRACE_EVENT (dma_alloc_sgt ,
161
+ TP_PROTO (struct device * dev , struct sg_table * sgt , size_t size ,
162
+ enum dma_data_direction dir , gfp_t flags , unsigned long attrs ),
163
+ TP_ARGS (dev , sgt , size , dir , flags , attrs ),
164
+
165
+ TP_STRUCT__entry (
166
+ __string (device , dev_name (dev ))
167
+ __dynamic_array (u64 , phys_addrs , sgt -> orig_nents )
168
+ __field (u64 , dma_addr )
169
+ __field (size_t , size )
170
+ __field (enum dma_data_direction , dir )
171
+ __field (gfp_t , flags )
172
+ __field (unsigned long , attrs )
173
+ ),
174
+
175
+ TP_fast_assign (
176
+ struct scatterlist * sg ;
177
+ int i ;
178
+
179
+ __assign_str (device );
180
+ for_each_sg (sgt -> sgl , sg , sgt -> orig_nents , i )
181
+ ((u64 * )__get_dynamic_array (phys_addrs ))[i ] = sg_phys (sg );
182
+ __entry -> dma_addr = sg_dma_address (sgt -> sgl );
183
+ __entry -> size = size ;
184
+ __entry -> dir = dir ;
185
+ __entry -> flags = flags ;
186
+ __entry -> attrs = attrs ;
187
+ ),
188
+
189
+ TP_printk ("%s dir=%s dma_addr=%llx size=%zu phys_addrs=%s flags=%s attrs=%s" ,
190
+ __get_str (device ),
191
+ decode_dma_data_direction (__entry -> dir ),
192
+ __entry -> dma_addr ,
193
+ __entry -> size ,
194
+ __print_array (__get_dynamic_array (phys_addrs ),
195
+ __get_dynamic_array_len (phys_addrs ) /
196
+ sizeof (u64 ), sizeof (u64 )),
197
+ show_gfp_flags (__entry -> flags ),
198
+ decode_dma_attrs (__entry -> attrs ))
199
+ );
200
+
201
+ DECLARE_EVENT_CLASS (dma_free_class ,
151
202
TP_PROTO (struct device * dev , void * virt_addr , dma_addr_t dma_addr ,
152
203
size_t size , enum dma_data_direction dir , unsigned long attrs ),
153
204
TP_ARGS (dev , virt_addr , dma_addr , size , dir , attrs ),
@@ -179,6 +230,50 @@ TRACE_EVENT(dma_free,
179
230
decode_dma_attrs (__entry -> attrs ))
180
231
);
181
232
233
+ #define DEFINE_FREE_EVENT (name ) \
234
+ DEFINE_EVENT(dma_free_class, name, \
235
+ TP_PROTO(struct device *dev, void *virt_addr, dma_addr_t dma_addr, \
236
+ size_t size, enum dma_data_direction dir, unsigned long attrs), \
237
+ TP_ARGS(dev, virt_addr, dma_addr, size, dir, attrs))
238
+
239
+ DEFINE_FREE_EVENT (dma_free );
240
+ DEFINE_FREE_EVENT (dma_free_pages );
241
+
242
+ TRACE_EVENT (dma_free_sgt ,
243
+ TP_PROTO (struct device * dev , struct sg_table * sgt , size_t size ,
244
+ enum dma_data_direction dir ),
245
+ TP_ARGS (dev , sgt , size , dir ),
246
+
247
+ TP_STRUCT__entry (
248
+ __string (device , dev_name (dev ))
249
+ __dynamic_array (u64 , phys_addrs , sgt -> orig_nents )
250
+ __field (u64 , dma_addr )
251
+ __field (size_t , size )
252
+ __field (enum dma_data_direction , dir )
253
+ ),
254
+
255
+ TP_fast_assign (
256
+ struct scatterlist * sg ;
257
+ int i ;
258
+
259
+ __assign_str (device );
260
+ for_each_sg (sgt -> sgl , sg , sgt -> orig_nents , i )
261
+ ((u64 * )__get_dynamic_array (phys_addrs ))[i ] = sg_phys (sg );
262
+ __entry -> dma_addr = sg_dma_address (sgt -> sgl );
263
+ __entry -> size = size ;
264
+ __entry -> dir = dir ;
265
+ ),
266
+
267
+ TP_printk ("%s dir=%s dma_addr=%llx size=%zu phys_addrs=%s" ,
268
+ __get_str (device ),
269
+ decode_dma_data_direction (__entry -> dir ),
270
+ __entry -> dma_addr ,
271
+ __entry -> size ,
272
+ __print_array (__get_dynamic_array (phys_addrs ),
273
+ __get_dynamic_array_len (phys_addrs ) /
274
+ sizeof (u64 ), sizeof (u64 )))
275
+ );
276
+
182
277
TRACE_EVENT (dma_map_sg ,
183
278
TP_PROTO (struct device * dev , struct scatterlist * sgl , int nents ,
184
279
int ents , enum dma_data_direction dir , unsigned long attrs ),
0 commit comments