xref: /openbmc/linux/kernel/trace/trace_entries.h (revision 0a1c49db8d91c538f104f8d70e560c6fdd589bd4)
1*0a1c49dbSSteven Rostedt /*
2*0a1c49dbSSteven Rostedt  * This file defines the trace event structures that go into the ring
3*0a1c49dbSSteven Rostedt  * buffer directly. They are created via macros so that changes for them
4*0a1c49dbSSteven Rostedt  * appear in the format file. Using macros will automate this process.
5*0a1c49dbSSteven Rostedt  *
6*0a1c49dbSSteven Rostedt  * The macro used to create a ftrace data structure is:
7*0a1c49dbSSteven Rostedt  *
8*0a1c49dbSSteven Rostedt  * FTRACE_ENTRY( name, struct_name, id, structure, print )
9*0a1c49dbSSteven Rostedt  *
10*0a1c49dbSSteven Rostedt  * @name: the name used the event name, as well as the name of
11*0a1c49dbSSteven Rostedt  *   the directory that holds the format file.
12*0a1c49dbSSteven Rostedt  *
13*0a1c49dbSSteven Rostedt  * @struct_name: the name of the structure that is created.
14*0a1c49dbSSteven Rostedt  *
15*0a1c49dbSSteven Rostedt  * @id: The event identifier that is used to detect what event
16*0a1c49dbSSteven Rostedt  *    this is from the ring buffer.
17*0a1c49dbSSteven Rostedt  *
18*0a1c49dbSSteven Rostedt  * @structure: the structure layout
19*0a1c49dbSSteven Rostedt  *
20*0a1c49dbSSteven Rostedt  *  - __field(	type,	item	)
21*0a1c49dbSSteven Rostedt  *	  This is equivalent to declaring
22*0a1c49dbSSteven Rostedt  *		type	item;
23*0a1c49dbSSteven Rostedt  *	  in the structure.
24*0a1c49dbSSteven Rostedt  *  - __array(	type,	item,	size	)
25*0a1c49dbSSteven Rostedt  *	  This is equivalent to declaring
26*0a1c49dbSSteven Rostedt  *		type	item[size];
27*0a1c49dbSSteven Rostedt  *	  in the structure.
28*0a1c49dbSSteven Rostedt  *
29*0a1c49dbSSteven Rostedt  * @print: the print format shown to users in the format file.
30*0a1c49dbSSteven Rostedt  */
31*0a1c49dbSSteven Rostedt 
32*0a1c49dbSSteven Rostedt /*
33*0a1c49dbSSteven Rostedt  * Function trace entry - function address and parent function addres:
34*0a1c49dbSSteven Rostedt  */
35*0a1c49dbSSteven Rostedt FTRACE_ENTRY(function, ftrace_entry,
36*0a1c49dbSSteven Rostedt 
37*0a1c49dbSSteven Rostedt 	TRACE_FN,
38*0a1c49dbSSteven Rostedt 
39*0a1c49dbSSteven Rostedt 	F_STRUCT(
40*0a1c49dbSSteven Rostedt 		__field(	unsigned long,	ip		)
41*0a1c49dbSSteven Rostedt 		__field(	unsigned long,	parent_ip	)
42*0a1c49dbSSteven Rostedt 	),
43*0a1c49dbSSteven Rostedt 
44*0a1c49dbSSteven Rostedt 	F_printk(" %lx <-- %lx", __entry->ip, __entry->parent_ip)
45*0a1c49dbSSteven Rostedt );
46*0a1c49dbSSteven Rostedt 
47*0a1c49dbSSteven Rostedt /* Function call entry */
48*0a1c49dbSSteven Rostedt FTRACE_ENTRY(funcgraph_entry, ftrace_graph_ent_entry,
49*0a1c49dbSSteven Rostedt 
50*0a1c49dbSSteven Rostedt 	TRACE_GRAPH_ENT,
51*0a1c49dbSSteven Rostedt 
52*0a1c49dbSSteven Rostedt 	F_STRUCT(
53*0a1c49dbSSteven Rostedt 		__field(	struct ftrace_graph_ent,	graph_ent	)
54*0a1c49dbSSteven Rostedt 	),
55*0a1c49dbSSteven Rostedt 
56*0a1c49dbSSteven Rostedt 	F_printk("--> %lx (%d)", __entry->graph_ent.func, __entry->depth)
57*0a1c49dbSSteven Rostedt );
58*0a1c49dbSSteven Rostedt 
59*0a1c49dbSSteven Rostedt /* Function return entry */
60*0a1c49dbSSteven Rostedt FTRACE_ENTRY(funcgraph_exit, ftrace_graph_ret_entry,
61*0a1c49dbSSteven Rostedt 
62*0a1c49dbSSteven Rostedt 	TRACE_GRAPH_RET,
63*0a1c49dbSSteven Rostedt 
64*0a1c49dbSSteven Rostedt 	F_STRUCT(
65*0a1c49dbSSteven Rostedt 		__field(	struct ftrace_graph_ret,	ret	)
66*0a1c49dbSSteven Rostedt 	),
67*0a1c49dbSSteven Rostedt 
68*0a1c49dbSSteven Rostedt 	F_printk("<-- %lx (%d) (start: %llx  end: %llx) over: %d",
69*0a1c49dbSSteven Rostedt 		 __entry->func, __entry->depth,
70*0a1c49dbSSteven Rostedt 		 __entry->calltime, __entry->rettim,
71*0a1c49dbSSteven Rostedt 		 __entrty->depth)
72*0a1c49dbSSteven Rostedt );
73*0a1c49dbSSteven Rostedt 
74*0a1c49dbSSteven Rostedt /*
75*0a1c49dbSSteven Rostedt  * Context switch trace entry - which task (and prio) we switched from/to:
76*0a1c49dbSSteven Rostedt  *
77*0a1c49dbSSteven Rostedt  * This is used for both wakeup and context switches. We only want
78*0a1c49dbSSteven Rostedt  * to create one structure, but we need two outputs for it.
79*0a1c49dbSSteven Rostedt  */
80*0a1c49dbSSteven Rostedt #define FTRACE_CTX_FIELDS					\
81*0a1c49dbSSteven Rostedt 	__field(	unsigned int,	prev_pid	)	\
82*0a1c49dbSSteven Rostedt 	__field(	unsigned char,	prev_prio	)	\
83*0a1c49dbSSteven Rostedt 	__field(	unsigned char,	prev_state	)	\
84*0a1c49dbSSteven Rostedt 	__field(	unsigned int,	next_pid	)	\
85*0a1c49dbSSteven Rostedt 	__field(	unsigned char,	next_prio	)	\
86*0a1c49dbSSteven Rostedt 	__field(	unsigned char,	next_state	)	\
87*0a1c49dbSSteven Rostedt 	__field(	unsigned int,	next_cpu	)
88*0a1c49dbSSteven Rostedt 
89*0a1c49dbSSteven Rostedt #if 0
90*0a1c49dbSSteven Rostedt FTRACE_ENTRY_STRUCT_ONLY(ctx_switch_entry,
91*0a1c49dbSSteven Rostedt 
92*0a1c49dbSSteven Rostedt 	F_STRUCT(
93*0a1c49dbSSteven Rostedt 		FTRACE_CTX_FIELDS
94*0a1c49dbSSteven Rostedt 	)
95*0a1c49dbSSteven Rostedt );
96*0a1c49dbSSteven Rostedt #endif
97*0a1c49dbSSteven Rostedt 
98*0a1c49dbSSteven Rostedt FTRACE_ENTRY(context_switch, ctx_switch_entry,
99*0a1c49dbSSteven Rostedt 
100*0a1c49dbSSteven Rostedt 	TRACE_CTX,
101*0a1c49dbSSteven Rostedt 
102*0a1c49dbSSteven Rostedt 	F_STRUCT(
103*0a1c49dbSSteven Rostedt 		FTRACE_CTX_FIELDS
104*0a1c49dbSSteven Rostedt 	),
105*0a1c49dbSSteven Rostedt 
106*0a1c49dbSSteven Rostedt 	F_printk(b"%u:%u:%u  ==> %u:%u:%u [%03u]",
107*0a1c49dbSSteven Rostedt 		 __entry->prev_pid, __entry->prev_prio, __entry->prev_state,
108*0a1c49dbSSteven Rostedt 		 __entry->next_pid, __entry->next_prio, __entry->next_state,
109*0a1c49dbSSteven Rostedt 		 __entry->next_cpu
110*0a1c49dbSSteven Rostedt 		)
111*0a1c49dbSSteven Rostedt );
112*0a1c49dbSSteven Rostedt 
113*0a1c49dbSSteven Rostedt /*
114*0a1c49dbSSteven Rostedt  * FTRACE_ENTRY_DUP only creates the format file, it will not
115*0a1c49dbSSteven Rostedt  *  create another structure.
116*0a1c49dbSSteven Rostedt  */
117*0a1c49dbSSteven Rostedt FTRACE_ENTRY_DUP(wakeup, ctx_switch_entry,
118*0a1c49dbSSteven Rostedt 
119*0a1c49dbSSteven Rostedt 	TRACE_WAKE,
120*0a1c49dbSSteven Rostedt 
121*0a1c49dbSSteven Rostedt 	F_STRUCT(
122*0a1c49dbSSteven Rostedt 		FTRACE_CTX_FIELDS
123*0a1c49dbSSteven Rostedt 	),
124*0a1c49dbSSteven Rostedt 
125*0a1c49dbSSteven Rostedt 	F_printk("%u:%u:%u  ==+ %u:%u:%u [%03u]",
126*0a1c49dbSSteven Rostedt 		 __entry->prev_pid, __entry->prev_prio, __entry->prev_state,
127*0a1c49dbSSteven Rostedt 		 __entry->next_pid, __entry->next_prio, __entry->next_state,
128*0a1c49dbSSteven Rostedt 		 __entry->next_cpu
129*0a1c49dbSSteven Rostedt 		)
130*0a1c49dbSSteven Rostedt );
131*0a1c49dbSSteven Rostedt 
132*0a1c49dbSSteven Rostedt /*
133*0a1c49dbSSteven Rostedt  * Special (free-form) trace entry:
134*0a1c49dbSSteven Rostedt  */
135*0a1c49dbSSteven Rostedt FTRACE_ENTRY(special, special_entry,
136*0a1c49dbSSteven Rostedt 
137*0a1c49dbSSteven Rostedt 	TRACE_SPECIAL,
138*0a1c49dbSSteven Rostedt 
139*0a1c49dbSSteven Rostedt 	F_STRUCT(
140*0a1c49dbSSteven Rostedt 		__field(	unsigned long,	arg1	)
141*0a1c49dbSSteven Rostedt 		__field(	unsigned long,	arg2	)
142*0a1c49dbSSteven Rostedt 		__field(	unsigned long,	arg3	)
143*0a1c49dbSSteven Rostedt 	),
144*0a1c49dbSSteven Rostedt 
145*0a1c49dbSSteven Rostedt 	F_printk("(%08lx) (%08lx) (%08lx)",
146*0a1c49dbSSteven Rostedt 		 __entry->arg1, __entry->arg2, __entry->arg3)
147*0a1c49dbSSteven Rostedt );
148*0a1c49dbSSteven Rostedt 
149*0a1c49dbSSteven Rostedt /*
150*0a1c49dbSSteven Rostedt  * Stack-trace entry:
151*0a1c49dbSSteven Rostedt  */
152*0a1c49dbSSteven Rostedt 
153*0a1c49dbSSteven Rostedt #define FTRACE_STACK_ENTRIES	8
154*0a1c49dbSSteven Rostedt 
155*0a1c49dbSSteven Rostedt FTRACE_ENTRY(kernel_stack, stack_entry,
156*0a1c49dbSSteven Rostedt 
157*0a1c49dbSSteven Rostedt 	TRACE_STACK,
158*0a1c49dbSSteven Rostedt 
159*0a1c49dbSSteven Rostedt 	F_STRUCT(
160*0a1c49dbSSteven Rostedt 		__array(	unsigned long,	caller, FTRACE_STACK_ENTRIES	)
161*0a1c49dbSSteven Rostedt 	),
162*0a1c49dbSSteven Rostedt 
163*0a1c49dbSSteven Rostedt 	F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n"
164*0a1c49dbSSteven Rostedt 		 "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n",
165*0a1c49dbSSteven Rostedt 		 __entry->caller[0], __entry->caller[1], __entry->caller[2],
166*0a1c49dbSSteven Rostedt 		 __entry->caller[3], __entry->caller[4], __entry->caller[5],
167*0a1c49dbSSteven Rostedt 		 __entry->caller[6], __entry->caller[7])
168*0a1c49dbSSteven Rostedt );
169*0a1c49dbSSteven Rostedt 
170*0a1c49dbSSteven Rostedt FTRACE_ENTRY(user_stack, userstack_entry,
171*0a1c49dbSSteven Rostedt 
172*0a1c49dbSSteven Rostedt 	TRACE_USER_STACK,
173*0a1c49dbSSteven Rostedt 
174*0a1c49dbSSteven Rostedt 	F_STRUCT(
175*0a1c49dbSSteven Rostedt 		__field(	unsigned int,	tgid	)
176*0a1c49dbSSteven Rostedt 		__array(	unsigned long,	caller, FTRACE_STACK_ENTRIES	)
177*0a1c49dbSSteven Rostedt 	),
178*0a1c49dbSSteven Rostedt 
179*0a1c49dbSSteven Rostedt 	F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n"
180*0a1c49dbSSteven Rostedt 		 "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n",
181*0a1c49dbSSteven Rostedt 		 __entry->caller[0], __entry->caller[1], __entry->caller[2],
182*0a1c49dbSSteven Rostedt 		 __entry->caller[3], __entry->caller[4], __entry->caller[5],
183*0a1c49dbSSteven Rostedt 		 __entry->caller[6], __entry->caller[7])
184*0a1c49dbSSteven Rostedt );
185*0a1c49dbSSteven Rostedt 
186*0a1c49dbSSteven Rostedt /*
187*0a1c49dbSSteven Rostedt  * trace_printk entry:
188*0a1c49dbSSteven Rostedt  */
189*0a1c49dbSSteven Rostedt FTRACE_ENTRY(bprint, bprint_entry,
190*0a1c49dbSSteven Rostedt 
191*0a1c49dbSSteven Rostedt 	TRACE_BPRINT,
192*0a1c49dbSSteven Rostedt 
193*0a1c49dbSSteven Rostedt 	F_STRUCT(
194*0a1c49dbSSteven Rostedt 		__field(	unsigned long,	ip	)
195*0a1c49dbSSteven Rostedt 		__field(	const char *,	fmt	)
196*0a1c49dbSSteven Rostedt 		__dynamic_array(	u32,	buf	)
197*0a1c49dbSSteven Rostedt 	),
198*0a1c49dbSSteven Rostedt 
199*0a1c49dbSSteven Rostedt 	F_printk("%08lx fmt:%p",
200*0a1c49dbSSteven Rostedt 		 __entry->ip, __entry->fmt)
201*0a1c49dbSSteven Rostedt );
202*0a1c49dbSSteven Rostedt 
203*0a1c49dbSSteven Rostedt FTRACE_ENTRY(print, print_entry,
204*0a1c49dbSSteven Rostedt 
205*0a1c49dbSSteven Rostedt 	TRACE_PRINT,
206*0a1c49dbSSteven Rostedt 
207*0a1c49dbSSteven Rostedt 	F_STRUCT(
208*0a1c49dbSSteven Rostedt 		__field(	unsigned long,	ip	)
209*0a1c49dbSSteven Rostedt 		__dynamic_array(	char,	buf	)
210*0a1c49dbSSteven Rostedt 	),
211*0a1c49dbSSteven Rostedt 
212*0a1c49dbSSteven Rostedt 	F_printk("%08lx %s",
213*0a1c49dbSSteven Rostedt 		 __entry->ip, __entry->buf)
214*0a1c49dbSSteven Rostedt );
215*0a1c49dbSSteven Rostedt 
216*0a1c49dbSSteven Rostedt FTRACE_ENTRY(mmiotrace_rw, trace_mmiotrace_rw,
217*0a1c49dbSSteven Rostedt 
218*0a1c49dbSSteven Rostedt 	TRACE_MMIO_RW,
219*0a1c49dbSSteven Rostedt 
220*0a1c49dbSSteven Rostedt 	F_STRUCT(
221*0a1c49dbSSteven Rostedt 		__field(	struct mmiotrace_rw,	rw	)
222*0a1c49dbSSteven Rostedt 	),
223*0a1c49dbSSteven Rostedt 
224*0a1c49dbSSteven Rostedt 	F_printk("%lx %lx %lx %d %lx %lx",
225*0a1c49dbSSteven Rostedt 		 __entry->phs, __entry->value, __entry->pc,
226*0a1c49dbSSteven Rostedt 		 __entry->map_id, __entry->opcode, __entry->width)
227*0a1c49dbSSteven Rostedt );
228*0a1c49dbSSteven Rostedt 
229*0a1c49dbSSteven Rostedt FTRACE_ENTRY(mmiotrace_map, trace_mmiotrace_map,
230*0a1c49dbSSteven Rostedt 
231*0a1c49dbSSteven Rostedt 	TRACE_MMIO_MAP,
232*0a1c49dbSSteven Rostedt 
233*0a1c49dbSSteven Rostedt 	F_STRUCT(
234*0a1c49dbSSteven Rostedt 		__field(	struct mmiotrace_map,	map	)
235*0a1c49dbSSteven Rostedt 	),
236*0a1c49dbSSteven Rostedt 
237*0a1c49dbSSteven Rostedt 	F_printk("%lx %lx %lx %d %lx",
238*0a1c49dbSSteven Rostedt 		 __entry->phs, __entry->virt, __entry->len,
239*0a1c49dbSSteven Rostedt 		 __entry->map_id, __entry->opcode)
240*0a1c49dbSSteven Rostedt );
241*0a1c49dbSSteven Rostedt 
242*0a1c49dbSSteven Rostedt FTRACE_ENTRY(boot_call, trace_boot_call,
243*0a1c49dbSSteven Rostedt 
244*0a1c49dbSSteven Rostedt 	TRACE_BOOT_CALL,
245*0a1c49dbSSteven Rostedt 
246*0a1c49dbSSteven Rostedt 	F_STRUCT(
247*0a1c49dbSSteven Rostedt 		__field(	struct boot_trace_call,	boot_call	)
248*0a1c49dbSSteven Rostedt 	),
249*0a1c49dbSSteven Rostedt 
250*0a1c49dbSSteven Rostedt 	F_printk("%d  %s", __entry->caller, __entry->func)
251*0a1c49dbSSteven Rostedt );
252*0a1c49dbSSteven Rostedt 
253*0a1c49dbSSteven Rostedt FTRACE_ENTRY(boot_ret, trace_boot_ret,
254*0a1c49dbSSteven Rostedt 
255*0a1c49dbSSteven Rostedt 	TRACE_BOOT_RET,
256*0a1c49dbSSteven Rostedt 
257*0a1c49dbSSteven Rostedt 	F_STRUCT(
258*0a1c49dbSSteven Rostedt 		__field(	struct boot_trace_ret,	boot_ret	)
259*0a1c49dbSSteven Rostedt 	),
260*0a1c49dbSSteven Rostedt 
261*0a1c49dbSSteven Rostedt 	F_printk("%s %d %lx",
262*0a1c49dbSSteven Rostedt 		 __entry->func, __entry->result, __entry->duration)
263*0a1c49dbSSteven Rostedt );
264*0a1c49dbSSteven Rostedt 
265*0a1c49dbSSteven Rostedt #define TRACE_FUNC_SIZE 30
266*0a1c49dbSSteven Rostedt #define TRACE_FILE_SIZE 20
267*0a1c49dbSSteven Rostedt 
268*0a1c49dbSSteven Rostedt FTRACE_ENTRY(branch, trace_branch,
269*0a1c49dbSSteven Rostedt 
270*0a1c49dbSSteven Rostedt 	TRACE_BRANCH,
271*0a1c49dbSSteven Rostedt 
272*0a1c49dbSSteven Rostedt 	F_STRUCT(
273*0a1c49dbSSteven Rostedt 		__field(	unsigned int,	line				)
274*0a1c49dbSSteven Rostedt 		__array(	char,		func,	TRACE_FUNC_SIZE+1	)
275*0a1c49dbSSteven Rostedt 		__array(	char,		file,	TRACE_FILE_SIZE+1	)
276*0a1c49dbSSteven Rostedt 		__field(	char,		correct				)
277*0a1c49dbSSteven Rostedt 	),
278*0a1c49dbSSteven Rostedt 
279*0a1c49dbSSteven Rostedt 	F_printk("%u:%s:%s (%u)",
280*0a1c49dbSSteven Rostedt 		 __entry->line,
281*0a1c49dbSSteven Rostedt 		 __entry->func, __entry->file, __entry->correct)
282*0a1c49dbSSteven Rostedt );
283*0a1c49dbSSteven Rostedt 
284*0a1c49dbSSteven Rostedt FTRACE_ENTRY(hw_branch, hw_branch_entry,
285*0a1c49dbSSteven Rostedt 
286*0a1c49dbSSteven Rostedt 	TRACE_HW_BRANCHES,
287*0a1c49dbSSteven Rostedt 
288*0a1c49dbSSteven Rostedt 	F_STRUCT(
289*0a1c49dbSSteven Rostedt 		__field(	u64,	from	)
290*0a1c49dbSSteven Rostedt 		__field(	u64,	to	)
291*0a1c49dbSSteven Rostedt 	),
292*0a1c49dbSSteven Rostedt 
293*0a1c49dbSSteven Rostedt 	F_printk("from: %llx to: %llx", __entry->from, __entry->to)
294*0a1c49dbSSteven Rostedt );
295*0a1c49dbSSteven Rostedt 
296*0a1c49dbSSteven Rostedt FTRACE_ENTRY(power, trace_power,
297*0a1c49dbSSteven Rostedt 
298*0a1c49dbSSteven Rostedt 	TRACE_POWER,
299*0a1c49dbSSteven Rostedt 
300*0a1c49dbSSteven Rostedt 	F_STRUCT(
301*0a1c49dbSSteven Rostedt 		__field(	struct power_trace,	state_data	)
302*0a1c49dbSSteven Rostedt 	),
303*0a1c49dbSSteven Rostedt 
304*0a1c49dbSSteven Rostedt 	F_printk("%llx->%llx type:%u state:%u",
305*0a1c49dbSSteven Rostedt 		 __entry->stamp, __entry->end,
306*0a1c49dbSSteven Rostedt 		 __entry->type, __entry->state)
307*0a1c49dbSSteven Rostedt );
308*0a1c49dbSSteven Rostedt 
309*0a1c49dbSSteven Rostedt FTRACE_ENTRY(kmem_alloc, kmemtrace_alloc_entry,
310*0a1c49dbSSteven Rostedt 
311*0a1c49dbSSteven Rostedt 	TRACE_KMEM_ALLOC,
312*0a1c49dbSSteven Rostedt 
313*0a1c49dbSSteven Rostedt 	F_STRUCT(
314*0a1c49dbSSteven Rostedt 		__field(	enum kmemtrace_type_id,	type_id		)
315*0a1c49dbSSteven Rostedt 		__field(	unsigned long,		call_site	)
316*0a1c49dbSSteven Rostedt 		__field(	const void *,		ptr		)
317*0a1c49dbSSteven Rostedt 		__field(	size_t,			bytes_req	)
318*0a1c49dbSSteven Rostedt 		__field(	size_t,			bytes_alloc	)
319*0a1c49dbSSteven Rostedt 		__field(	gfp_t,			gfp_flags	)
320*0a1c49dbSSteven Rostedt 		__field(	int,			node		)
321*0a1c49dbSSteven Rostedt 	),
322*0a1c49dbSSteven Rostedt 
323*0a1c49dbSSteven Rostedt 	F_printk("type:%u call_site:%lx ptr:%p req:%lu alloc:%lu"
324*0a1c49dbSSteven Rostedt 		 " flags:%x node:%d",
325*0a1c49dbSSteven Rostedt 		 __entry->type_id, __entry->call_site, __entry->ptr,
326*0a1c49dbSSteven Rostedt 		 __entry->bytes_req, __entry->bytes_alloc,
327*0a1c49dbSSteven Rostedt 		 __entry->gfp_flags, __entry->node)
328*0a1c49dbSSteven Rostedt );
329*0a1c49dbSSteven Rostedt 
330*0a1c49dbSSteven Rostedt FTRACE_ENTRY(kmem_free, kmemtrace_free_entry,
331*0a1c49dbSSteven Rostedt 
332*0a1c49dbSSteven Rostedt 	TRACE_KMEM_FREE,
333*0a1c49dbSSteven Rostedt 
334*0a1c49dbSSteven Rostedt 	F_STRUCT(
335*0a1c49dbSSteven Rostedt 		__field(	enum kmemtrace_type_id,	type_id		)
336*0a1c49dbSSteven Rostedt 		__field(	unsigned long,		call_site	)
337*0a1c49dbSSteven Rostedt 		__field(	const void *,		ptr		)
338*0a1c49dbSSteven Rostedt 	),
339*0a1c49dbSSteven Rostedt 
340*0a1c49dbSSteven Rostedt 	F_printk("type:%u call_site:%lx ptr:%p",
341*0a1c49dbSSteven Rostedt 		 __entry->type_id, __entry->call_site, __entry->ptr)
342*0a1c49dbSSteven Rostedt );
343