@@ -112,7 +112,7 @@ DEFINE_EVENT(dma_unmap, name, \
112112DEFINE_UNMAP_EVENT (dma_unmap_page );
113113DEFINE_UNMAP_EVENT (dma_unmap_resource );
114114
115- TRACE_EVENT ( dma_alloc ,
115+ DECLARE_EVENT_CLASS ( dma_alloc_class ,
116116 TP_PROTO (struct device * dev , void * virt_addr , dma_addr_t dma_addr ,
117117 size_t size , enum dma_data_direction dir , gfp_t flags ,
118118 unsigned long attrs ),
@@ -147,7 +147,58 @@ TRACE_EVENT(dma_alloc,
147147 decode_dma_attrs (__entry -> attrs ))
148148);
149149
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 ,
151202 TP_PROTO (struct device * dev , void * virt_addr , dma_addr_t dma_addr ,
152203 size_t size , enum dma_data_direction dir , unsigned long attrs ),
153204 TP_ARGS (dev , virt_addr , dma_addr , size , dir , attrs ),
@@ -179,6 +230,50 @@ TRACE_EVENT(dma_free,
179230 decode_dma_attrs (__entry -> attrs ))
180231);
181232
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+
182277TRACE_EVENT (dma_map_sg ,
183278 TP_PROTO (struct device * dev , struct scatterlist * sgl , int nents ,
184279 int ents , enum dma_data_direction dir , unsigned long attrs ),
0 commit comments