@@ -65,15 +65,14 @@ DECLARE_EVENT_CLASS(dma_map,
65
65
decode_dma_attrs (__entry -> attrs ))
66
66
);
67
67
68
- DEFINE_EVENT (dma_map , dma_map_page ,
69
- TP_PROTO (struct device * dev , phys_addr_t phys_addr , dma_addr_t dma_addr ,
70
- size_t size , enum dma_data_direction dir , unsigned long attrs ),
71
- TP_ARGS (dev , phys_addr , dma_addr , size , dir , attrs ));
68
+ #define DEFINE_MAP_EVENT (name ) \
69
+ DEFINE_EVENT(dma_map, name, \
70
+ TP_PROTO(struct device *dev, phys_addr_t phys_addr, dma_addr_t dma_addr, \
71
+ size_t size, enum dma_data_direction dir, unsigned long attrs), \
72
+ TP_ARGS(dev, phys_addr, dma_addr, size, dir, attrs))
72
73
73
- DEFINE_EVENT (dma_map , dma_map_resource ,
74
- TP_PROTO (struct device * dev , phys_addr_t phys_addr , dma_addr_t dma_addr ,
75
- size_t size , enum dma_data_direction dir , unsigned long attrs ),
76
- TP_ARGS (dev , phys_addr , dma_addr , size , dir , attrs ));
74
+ DEFINE_MAP_EVENT (dma_map_page );
75
+ DEFINE_MAP_EVENT (dma_map_resource );
77
76
78
77
DECLARE_EVENT_CLASS (dma_unmap ,
79
78
TP_PROTO (struct device * dev , dma_addr_t addr , size_t size ,
@@ -104,27 +103,28 @@ DECLARE_EVENT_CLASS(dma_unmap,
104
103
decode_dma_attrs (__entry -> attrs ))
105
104
);
106
105
107
- DEFINE_EVENT (dma_unmap , dma_unmap_page ,
108
- TP_PROTO (struct device * dev , dma_addr_t addr , size_t size ,
109
- enum dma_data_direction dir , unsigned long attrs ),
110
- TP_ARGS (dev , addr , size , dir , attrs ));
106
+ #define DEFINE_UNMAP_EVENT (name ) \
107
+ DEFINE_EVENT(dma_unmap, name, \
108
+ TP_PROTO(struct device *dev, dma_addr_t addr, size_t size, \
109
+ enum dma_data_direction dir, unsigned long attrs), \
110
+ TP_ARGS(dev, addr, size, dir, attrs))
111
111
112
- DEFINE_EVENT (dma_unmap , dma_unmap_resource ,
113
- TP_PROTO (struct device * dev , dma_addr_t addr , size_t size ,
114
- enum dma_data_direction dir , unsigned long attrs ),
115
- TP_ARGS (dev , addr , size , dir , attrs ));
112
+ DEFINE_UNMAP_EVENT (dma_unmap_page );
113
+ DEFINE_UNMAP_EVENT (dma_unmap_resource );
116
114
117
- TRACE_EVENT ( dma_alloc ,
115
+ DECLARE_EVENT_CLASS ( dma_alloc_class ,
118
116
TP_PROTO (struct device * dev , void * virt_addr , dma_addr_t dma_addr ,
119
- size_t size , gfp_t flags , unsigned long attrs ),
120
- 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 ),
121
120
122
121
TP_STRUCT__entry (
123
122
__string (device , dev_name (dev ))
124
123
__field (void * , virt_addr )
125
124
__field (u64 , dma_addr )
126
125
__field (size_t , size )
127
126
__field (gfp_t , flags )
127
+ __field (enum dma_data_direction , dir )
128
128
__field (unsigned long , attrs )
129
129
),
130
130
@@ -137,25 +137,79 @@ TRACE_EVENT(dma_alloc,
137
137
__entry -> attrs = attrs ;
138
138
),
139
139
140
- 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" ,
141
141
__get_str (device ),
142
+ decode_dma_data_direction (__entry -> dir ),
142
143
__entry -> dma_addr ,
143
144
__entry -> size ,
144
145
__entry -> virt_addr ,
145
146
show_gfp_flags (__entry -> flags ),
146
147
decode_dma_attrs (__entry -> attrs ))
147
148
);
148
149
149
- 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
+ DEFINE_ALLOC_EVENT (dma_alloc_sgt_err );
160
+
161
+ TRACE_EVENT (dma_alloc_sgt ,
162
+ TP_PROTO (struct device * dev , struct sg_table * sgt , size_t size ,
163
+ enum dma_data_direction dir , gfp_t flags , unsigned long attrs ),
164
+ TP_ARGS (dev , sgt , size , dir , flags , attrs ),
165
+
166
+ TP_STRUCT__entry (
167
+ __string (device , dev_name (dev ))
168
+ __dynamic_array (u64 , phys_addrs , sgt -> orig_nents )
169
+ __field (u64 , dma_addr )
170
+ __field (size_t , size )
171
+ __field (enum dma_data_direction , dir )
172
+ __field (gfp_t , flags )
173
+ __field (unsigned long , attrs )
174
+ ),
175
+
176
+ TP_fast_assign (
177
+ struct scatterlist * sg ;
178
+ int i ;
179
+
180
+ __assign_str (device );
181
+ for_each_sg (sgt -> sgl , sg , sgt -> orig_nents , i )
182
+ ((u64 * )__get_dynamic_array (phys_addrs ))[i ] = sg_phys (sg );
183
+ __entry -> dma_addr = sg_dma_address (sgt -> sgl );
184
+ __entry -> size = size ;
185
+ __entry -> dir = dir ;
186
+ __entry -> flags = flags ;
187
+ __entry -> attrs = attrs ;
188
+ ),
189
+
190
+ TP_printk ("%s dir=%s dma_addr=%llx size=%zu phys_addrs=%s flags=%s attrs=%s" ,
191
+ __get_str (device ),
192
+ decode_dma_data_direction (__entry -> dir ),
193
+ __entry -> dma_addr ,
194
+ __entry -> size ,
195
+ __print_array (__get_dynamic_array (phys_addrs ),
196
+ __get_dynamic_array_len (phys_addrs ) /
197
+ sizeof (u64 ), sizeof (u64 )),
198
+ show_gfp_flags (__entry -> flags ),
199
+ decode_dma_attrs (__entry -> attrs ))
200
+ );
201
+
202
+ DECLARE_EVENT_CLASS (dma_free_class ,
150
203
TP_PROTO (struct device * dev , void * virt_addr , dma_addr_t dma_addr ,
151
- size_t size , unsigned long attrs ),
152
- TP_ARGS (dev , virt_addr , dma_addr , size , attrs ),
204
+ size_t size , enum dma_data_direction dir , unsigned long attrs ),
205
+ TP_ARGS (dev , virt_addr , dma_addr , size , dir , attrs ),
153
206
154
207
TP_STRUCT__entry (
155
208
__string (device , dev_name (dev ))
156
209
__field (void * , virt_addr )
157
210
__field (u64 , dma_addr )
158
211
__field (size_t , size )
212
+ __field (enum dma_data_direction , dir )
159
213
__field (unsigned long , attrs )
160
214
),
161
215
@@ -164,17 +218,63 @@ TRACE_EVENT(dma_free,
164
218
__entry -> virt_addr = virt_addr ;
165
219
__entry -> dma_addr = dma_addr ;
166
220
__entry -> size = size ;
221
+ __entry -> dir = dir ;
167
222
__entry -> attrs = attrs ;
168
223
),
169
224
170
- TP_printk ("%s dma_addr=%llx size=%zu virt_addr=%p attrs=%s" ,
225
+ TP_printk ("%s dir=%s dma_addr=%llx size=%zu virt_addr=%p attrs=%s" ,
171
226
__get_str (device ),
227
+ decode_dma_data_direction (__entry -> dir ),
172
228
__entry -> dma_addr ,
173
229
__entry -> size ,
174
230
__entry -> virt_addr ,
175
231
decode_dma_attrs (__entry -> attrs ))
176
232
);
177
233
234
+ #define DEFINE_FREE_EVENT (name ) \
235
+ DEFINE_EVENT(dma_free_class, name, \
236
+ TP_PROTO(struct device *dev, void *virt_addr, dma_addr_t dma_addr, \
237
+ size_t size, enum dma_data_direction dir, unsigned long attrs), \
238
+ TP_ARGS(dev, virt_addr, dma_addr, size, dir, attrs))
239
+
240
+ DEFINE_FREE_EVENT (dma_free );
241
+ DEFINE_FREE_EVENT (dma_free_pages );
242
+
243
+ TRACE_EVENT (dma_free_sgt ,
244
+ TP_PROTO (struct device * dev , struct sg_table * sgt , size_t size ,
245
+ enum dma_data_direction dir ),
246
+ TP_ARGS (dev , sgt , size , dir ),
247
+
248
+ TP_STRUCT__entry (
249
+ __string (device , dev_name (dev ))
250
+ __dynamic_array (u64 , phys_addrs , sgt -> orig_nents )
251
+ __field (u64 , dma_addr )
252
+ __field (size_t , size )
253
+ __field (enum dma_data_direction , dir )
254
+ ),
255
+
256
+ TP_fast_assign (
257
+ struct scatterlist * sg ;
258
+ int i ;
259
+
260
+ __assign_str (device );
261
+ for_each_sg (sgt -> sgl , sg , sgt -> orig_nents , i )
262
+ ((u64 * )__get_dynamic_array (phys_addrs ))[i ] = sg_phys (sg );
263
+ __entry -> dma_addr = sg_dma_address (sgt -> sgl );
264
+ __entry -> size = size ;
265
+ __entry -> dir = dir ;
266
+ ),
267
+
268
+ TP_printk ("%s dir=%s dma_addr=%llx size=%zu phys_addrs=%s" ,
269
+ __get_str (device ),
270
+ decode_dma_data_direction (__entry -> dir ),
271
+ __entry -> dma_addr ,
272
+ __entry -> size ,
273
+ __print_array (__get_dynamic_array (phys_addrs ),
274
+ __get_dynamic_array_len (phys_addrs ) /
275
+ sizeof (u64 ), sizeof (u64 )))
276
+ );
277
+
178
278
TRACE_EVENT (dma_map_sg ,
179
279
TP_PROTO (struct device * dev , struct scatterlist * sgl , int nents ,
180
280
int ents , enum dma_data_direction dir , unsigned long attrs ),
@@ -221,6 +321,41 @@ TRACE_EVENT(dma_map_sg,
221
321
decode_dma_attrs (__entry -> attrs ))
222
322
);
223
323
324
+ TRACE_EVENT (dma_map_sg_err ,
325
+ TP_PROTO (struct device * dev , struct scatterlist * sgl , int nents ,
326
+ int err , enum dma_data_direction dir , unsigned long attrs ),
327
+ TP_ARGS (dev , sgl , nents , err , dir , attrs ),
328
+
329
+ TP_STRUCT__entry (
330
+ __string (device , dev_name (dev ))
331
+ __dynamic_array (u64 , phys_addrs , nents )
332
+ __field (int , err )
333
+ __field (enum dma_data_direction , dir )
334
+ __field (unsigned long , attrs )
335
+ ),
336
+
337
+ TP_fast_assign (
338
+ struct scatterlist * sg ;
339
+ int i ;
340
+
341
+ __assign_str (device );
342
+ for_each_sg (sgl , sg , nents , i )
343
+ ((u64 * )__get_dynamic_array (phys_addrs ))[i ] = sg_phys (sg );
344
+ __entry -> err = err ;
345
+ __entry -> dir = dir ;
346
+ __entry -> attrs = attrs ;
347
+ ),
348
+
349
+ TP_printk ("%s dir=%s dma_addrs=%s err=%d attrs=%s" ,
350
+ __get_str (device ),
351
+ decode_dma_data_direction (__entry -> dir ),
352
+ __print_array (__get_dynamic_array (phys_addrs ),
353
+ __get_dynamic_array_len (phys_addrs ) /
354
+ sizeof (u64 ), sizeof (u64 )),
355
+ __entry -> err ,
356
+ decode_dma_attrs (__entry -> attrs ))
357
+ );
358
+
224
359
TRACE_EVENT (dma_unmap_sg ,
225
360
TP_PROTO (struct device * dev , struct scatterlist * sgl , int nents ,
226
361
enum dma_data_direction dir , unsigned long attrs ),
@@ -279,15 +414,14 @@ DECLARE_EVENT_CLASS(dma_sync_single,
279
414
__entry -> size )
280
415
);
281
416
282
- DEFINE_EVENT (dma_sync_single , dma_sync_single_for_cpu ,
283
- TP_PROTO (struct device * dev , dma_addr_t dma_addr , size_t size ,
284
- enum dma_data_direction dir ),
285
- TP_ARGS (dev , dma_addr , size , dir ));
417
+ #define DEFINE_SYNC_SINGLE_EVENT (name ) \
418
+ DEFINE_EVENT(dma_sync_single, name, \
419
+ TP_PROTO(struct device *dev, dma_addr_t dma_addr, size_t size, \
420
+ enum dma_data_direction dir), \
421
+ TP_ARGS(dev, dma_addr, size, dir))
286
422
287
- DEFINE_EVENT (dma_sync_single , dma_sync_single_for_device ,
288
- TP_PROTO (struct device * dev , dma_addr_t dma_addr , size_t size ,
289
- enum dma_data_direction dir ),
290
- TP_ARGS (dev , dma_addr , size , dir ));
423
+ DEFINE_SYNC_SINGLE_EVENT (dma_sync_single_for_cpu );
424
+ DEFINE_SYNC_SINGLE_EVENT (dma_sync_single_for_device );
291
425
292
426
DECLARE_EVENT_CLASS (dma_sync_sg ,
293
427
TP_PROTO (struct device * dev , struct scatterlist * sgl , int nents ,
@@ -326,15 +460,14 @@ DECLARE_EVENT_CLASS(dma_sync_sg,
326
460
sizeof (unsigned int ), sizeof (unsigned int )))
327
461
);
328
462
329
- DEFINE_EVENT (dma_sync_sg , dma_sync_sg_for_cpu ,
330
- TP_PROTO (struct device * dev , struct scatterlist * sg , int nents ,
331
- enum dma_data_direction dir ),
332
- TP_ARGS (dev , sg , nents , dir ));
463
+ #define DEFINE_SYNC_SG_EVENT (name ) \
464
+ DEFINE_EVENT(dma_sync_sg, name, \
465
+ TP_PROTO(struct device *dev, struct scatterlist *sg, int nents, \
466
+ enum dma_data_direction dir), \
467
+ TP_ARGS(dev, sg, nents, dir))
333
468
334
- DEFINE_EVENT (dma_sync_sg , dma_sync_sg_for_device ,
335
- TP_PROTO (struct device * dev , struct scatterlist * sg , int nents ,
336
- enum dma_data_direction dir ),
337
- TP_ARGS (dev , sg , nents , dir ));
469
+ DEFINE_SYNC_SG_EVENT (dma_sync_sg_for_cpu );
470
+ DEFINE_SYNC_SG_EVENT (dma_sync_sg_for_device );
338
471
339
472
#endif /* _TRACE_DMA_H */
340
473
0 commit comments