xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/i915/gvt/trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright © 2011-2016 Intel Corporation
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Permission is hereby granted, free of charge, to any person obtaining a
5*4882a593Smuzhiyun  * copy of this software and associated documentation files (the "Software"),
6*4882a593Smuzhiyun  * to deal in the Software without restriction, including without limitation
7*4882a593Smuzhiyun  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*4882a593Smuzhiyun  * and/or sell copies of the Software, and to permit persons to whom the
9*4882a593Smuzhiyun  * Software is furnished to do so, subject to the following conditions:
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * The above copyright notice and this permission notice (including the next
12*4882a593Smuzhiyun  * paragraph) shall be included in all copies or substantial portions of the
13*4882a593Smuzhiyun  * Software.
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*4882a593Smuzhiyun  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*4882a593Smuzhiyun  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*4882a593Smuzhiyun  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*4882a593Smuzhiyun  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*4882a593Smuzhiyun  * IN THE SOFTWARE.
22*4882a593Smuzhiyun  *
23*4882a593Smuzhiyun  * Authors:
24*4882a593Smuzhiyun  *    Jike Song <jike.song@intel.com>
25*4882a593Smuzhiyun  *
26*4882a593Smuzhiyun  * Contributors:
27*4882a593Smuzhiyun  *    Zhi Wang <zhi.a.wang@intel.com>
28*4882a593Smuzhiyun  *
29*4882a593Smuzhiyun  */
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #if !defined(_GVT_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
32*4882a593Smuzhiyun #define _GVT_TRACE_H_
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #include <linux/types.h>
35*4882a593Smuzhiyun #include <linux/stringify.h>
36*4882a593Smuzhiyun #include <linux/tracepoint.h>
37*4882a593Smuzhiyun #include <asm/tsc.h>
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #undef TRACE_SYSTEM
40*4882a593Smuzhiyun #define TRACE_SYSTEM gvt
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun TRACE_EVENT(spt_alloc,
43*4882a593Smuzhiyun 	TP_PROTO(int id, void *spt, int type, unsigned long mfn,
44*4882a593Smuzhiyun 		unsigned long gpt_gfn),
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	TP_ARGS(id, spt, type, mfn, gpt_gfn),
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	TP_STRUCT__entry(
49*4882a593Smuzhiyun 		__field(int, id)
50*4882a593Smuzhiyun 		__field(void *, spt)
51*4882a593Smuzhiyun 		__field(int, type)
52*4882a593Smuzhiyun 		__field(unsigned long, mfn)
53*4882a593Smuzhiyun 		__field(unsigned long, gpt_gfn)
54*4882a593Smuzhiyun 		),
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun 	TP_fast_assign(
57*4882a593Smuzhiyun 		__entry->id = id;
58*4882a593Smuzhiyun 		__entry->spt = spt;
59*4882a593Smuzhiyun 		__entry->type = type;
60*4882a593Smuzhiyun 		__entry->mfn = mfn;
61*4882a593Smuzhiyun 		__entry->gpt_gfn = gpt_gfn;
62*4882a593Smuzhiyun 	),
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun 	TP_printk("VM%d [alloc] spt %p type %d mfn 0x%lx gfn 0x%lx\n",
65*4882a593Smuzhiyun 		__entry->id,
66*4882a593Smuzhiyun 		__entry->spt,
67*4882a593Smuzhiyun 		__entry->type,
68*4882a593Smuzhiyun 		__entry->mfn,
69*4882a593Smuzhiyun 		__entry->gpt_gfn)
70*4882a593Smuzhiyun );
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun TRACE_EVENT(spt_free,
73*4882a593Smuzhiyun 	TP_PROTO(int id, void *spt, int type),
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun 	TP_ARGS(id, spt, type),
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun 	TP_STRUCT__entry(
78*4882a593Smuzhiyun 		__field(int, id)
79*4882a593Smuzhiyun 		__field(void *, spt)
80*4882a593Smuzhiyun 		__field(int, type)
81*4882a593Smuzhiyun 		),
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	TP_fast_assign(
84*4882a593Smuzhiyun 		__entry->id = id;
85*4882a593Smuzhiyun 		__entry->spt = spt;
86*4882a593Smuzhiyun 		__entry->type = type;
87*4882a593Smuzhiyun 	),
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun 	TP_printk("VM%u [free] spt %p type %d\n",
90*4882a593Smuzhiyun 		__entry->id,
91*4882a593Smuzhiyun 		__entry->spt,
92*4882a593Smuzhiyun 		__entry->type)
93*4882a593Smuzhiyun );
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun #define MAX_BUF_LEN 256
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun TRACE_EVENT(gma_index,
98*4882a593Smuzhiyun 	TP_PROTO(const char *prefix, unsigned long gma,
99*4882a593Smuzhiyun 		unsigned long index),
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun 	TP_ARGS(prefix, gma, index),
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	TP_STRUCT__entry(
104*4882a593Smuzhiyun 		__array(char, buf, MAX_BUF_LEN)
105*4882a593Smuzhiyun 	),
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun 	TP_fast_assign(
108*4882a593Smuzhiyun 		snprintf(__entry->buf, MAX_BUF_LEN,
109*4882a593Smuzhiyun 			"%s gma 0x%lx index 0x%lx\n", prefix, gma, index);
110*4882a593Smuzhiyun 	),
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun 	TP_printk("%s", __entry->buf)
113*4882a593Smuzhiyun );
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun TRACE_EVENT(gma_translate,
116*4882a593Smuzhiyun 	TP_PROTO(int id, char *type, int ring_id, int root_entry_type,
117*4882a593Smuzhiyun 		unsigned long gma, unsigned long gpa),
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun 	TP_ARGS(id, type, ring_id, root_entry_type, gma, gpa),
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun 	TP_STRUCT__entry(
122*4882a593Smuzhiyun 		__array(char, buf, MAX_BUF_LEN)
123*4882a593Smuzhiyun 	),
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun 	TP_fast_assign(
126*4882a593Smuzhiyun 		snprintf(__entry->buf, MAX_BUF_LEN,
127*4882a593Smuzhiyun 			"VM%d %s ring %d root_entry_type %d gma 0x%lx -> gpa 0x%lx\n",
128*4882a593Smuzhiyun 			id, type, ring_id, root_entry_type, gma, gpa);
129*4882a593Smuzhiyun 	),
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun 	TP_printk("%s", __entry->buf)
132*4882a593Smuzhiyun );
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun TRACE_EVENT(spt_refcount,
135*4882a593Smuzhiyun 	TP_PROTO(int id, char *action, void *spt, int before, int after),
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun 	TP_ARGS(id, action, spt, before, after),
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun 	TP_STRUCT__entry(
140*4882a593Smuzhiyun 		__array(char, buf, MAX_BUF_LEN)
141*4882a593Smuzhiyun 	),
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun 	TP_fast_assign(
144*4882a593Smuzhiyun 		snprintf(__entry->buf, MAX_BUF_LEN,
145*4882a593Smuzhiyun 			"VM%d [%s] spt %p before %d -> after %d\n",
146*4882a593Smuzhiyun 				id, action, spt, before, after);
147*4882a593Smuzhiyun 	),
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun 	TP_printk("%s", __entry->buf)
150*4882a593Smuzhiyun );
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun TRACE_EVENT(spt_change,
153*4882a593Smuzhiyun 	TP_PROTO(int id, char *action, void *spt, unsigned long gfn,
154*4882a593Smuzhiyun 		int type),
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun 	TP_ARGS(id, action, spt, gfn, type),
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun 	TP_STRUCT__entry(
159*4882a593Smuzhiyun 		__array(char, buf, MAX_BUF_LEN)
160*4882a593Smuzhiyun 	),
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun 	TP_fast_assign(
163*4882a593Smuzhiyun 		snprintf(__entry->buf, MAX_BUF_LEN,
164*4882a593Smuzhiyun 			"VM%d [%s] spt %p gfn 0x%lx type %d\n",
165*4882a593Smuzhiyun 				id, action, spt, gfn, type);
166*4882a593Smuzhiyun 	),
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun 	TP_printk("%s", __entry->buf)
169*4882a593Smuzhiyun );
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun TRACE_EVENT(spt_guest_change,
172*4882a593Smuzhiyun 	TP_PROTO(int id, const char *tag, void *spt, int type, u64 v,
173*4882a593Smuzhiyun 		unsigned long index),
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun 	TP_ARGS(id, tag, spt, type, v, index),
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun 	TP_STRUCT__entry(
178*4882a593Smuzhiyun 		__array(char, buf, MAX_BUF_LEN)
179*4882a593Smuzhiyun 	),
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun 	TP_fast_assign(
182*4882a593Smuzhiyun 		snprintf(__entry->buf, MAX_BUF_LEN,
183*4882a593Smuzhiyun 		"VM%d [%s] spt %p type %d entry 0x%llx index 0x%lx\n",
184*4882a593Smuzhiyun 			id, tag, spt, type, v, index);
185*4882a593Smuzhiyun 	),
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun 	TP_printk("%s", __entry->buf)
188*4882a593Smuzhiyun );
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun TRACE_EVENT(oos_change,
191*4882a593Smuzhiyun 	TP_PROTO(int id, const char *tag, int page_id, void *gpt, int type),
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun 	TP_ARGS(id, tag, page_id, gpt, type),
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun 	TP_STRUCT__entry(
196*4882a593Smuzhiyun 		__array(char, buf, MAX_BUF_LEN)
197*4882a593Smuzhiyun 	),
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun 	TP_fast_assign(
200*4882a593Smuzhiyun 		snprintf(__entry->buf, MAX_BUF_LEN,
201*4882a593Smuzhiyun 		"VM%d [oos %s] page id %d gpt %p type %d\n",
202*4882a593Smuzhiyun 			id, tag, page_id, gpt, type);
203*4882a593Smuzhiyun 	),
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun 	TP_printk("%s", __entry->buf)
206*4882a593Smuzhiyun );
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun TRACE_EVENT(oos_sync,
209*4882a593Smuzhiyun 	TP_PROTO(int id, int page_id, void *gpt, int type, u64 v,
210*4882a593Smuzhiyun 		unsigned long index),
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun 	TP_ARGS(id, page_id, gpt, type, v, index),
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun 	TP_STRUCT__entry(
215*4882a593Smuzhiyun 		__array(char, buf, MAX_BUF_LEN)
216*4882a593Smuzhiyun 	),
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun 	TP_fast_assign(
219*4882a593Smuzhiyun 	snprintf(__entry->buf, MAX_BUF_LEN,
220*4882a593Smuzhiyun 	"VM%d [oos sync] page id %d gpt %p type %d entry 0x%llx index 0x%lx\n",
221*4882a593Smuzhiyun 				id, page_id, gpt, type, v, index);
222*4882a593Smuzhiyun 	),
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun 	TP_printk("%s", __entry->buf)
225*4882a593Smuzhiyun );
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun #define GVT_CMD_STR_LEN 40
228*4882a593Smuzhiyun TRACE_EVENT(gvt_command,
229*4882a593Smuzhiyun 	TP_PROTO(u8 vgpu_id, u8 ring_id, u32 ip_gma, u32 *cmd_va,
230*4882a593Smuzhiyun 		u32 cmd_len,  u32 buf_type, u32 buf_addr_type,
231*4882a593Smuzhiyun 		void *workload, const char *cmd_name),
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	TP_ARGS(vgpu_id, ring_id, ip_gma, cmd_va, cmd_len, buf_type,
234*4882a593Smuzhiyun 		buf_addr_type, workload, cmd_name),
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun 	TP_STRUCT__entry(
237*4882a593Smuzhiyun 		__field(u8, vgpu_id)
238*4882a593Smuzhiyun 		__field(u8, ring_id)
239*4882a593Smuzhiyun 		__field(u32, ip_gma)
240*4882a593Smuzhiyun 		__field(u32, buf_type)
241*4882a593Smuzhiyun 		__field(u32, buf_addr_type)
242*4882a593Smuzhiyun 		__field(u32, cmd_len)
243*4882a593Smuzhiyun 		__field(void*, workload)
244*4882a593Smuzhiyun 		__dynamic_array(u32, raw_cmd, cmd_len)
245*4882a593Smuzhiyun 		__array(char, cmd_name, GVT_CMD_STR_LEN)
246*4882a593Smuzhiyun 	),
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun 	TP_fast_assign(
249*4882a593Smuzhiyun 		__entry->vgpu_id = vgpu_id;
250*4882a593Smuzhiyun 		__entry->ring_id = ring_id;
251*4882a593Smuzhiyun 		__entry->ip_gma = ip_gma;
252*4882a593Smuzhiyun 		__entry->buf_type = buf_type;
253*4882a593Smuzhiyun 		__entry->buf_addr_type = buf_addr_type;
254*4882a593Smuzhiyun 		__entry->cmd_len = cmd_len;
255*4882a593Smuzhiyun 		__entry->workload = workload;
256*4882a593Smuzhiyun 		snprintf(__entry->cmd_name, GVT_CMD_STR_LEN, "%s", cmd_name);
257*4882a593Smuzhiyun 		memcpy(__get_dynamic_array(raw_cmd), cmd_va, cmd_len * sizeof(*cmd_va));
258*4882a593Smuzhiyun 	),
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun 	TP_printk("vgpu%d ring %d: address_type %u, buf_type %u, ip_gma %08x,cmd (name=%s,len=%u,raw cmd=%s), workload=%p\n",
262*4882a593Smuzhiyun 		__entry->vgpu_id,
263*4882a593Smuzhiyun 		__entry->ring_id,
264*4882a593Smuzhiyun 		__entry->buf_addr_type,
265*4882a593Smuzhiyun 		__entry->buf_type,
266*4882a593Smuzhiyun 		__entry->ip_gma,
267*4882a593Smuzhiyun 		__entry->cmd_name,
268*4882a593Smuzhiyun 		__entry->cmd_len,
269*4882a593Smuzhiyun 		__print_array(__get_dynamic_array(raw_cmd),
270*4882a593Smuzhiyun 			__entry->cmd_len, 4),
271*4882a593Smuzhiyun 		__entry->workload)
272*4882a593Smuzhiyun );
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun #define GVT_TEMP_STR_LEN 10
275*4882a593Smuzhiyun TRACE_EVENT(write_ir,
276*4882a593Smuzhiyun 	TP_PROTO(int id, char *reg_name, unsigned int reg, unsigned int new_val,
277*4882a593Smuzhiyun 		 unsigned int old_val, bool changed),
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun 	TP_ARGS(id, reg_name, reg, new_val, old_val, changed),
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun 	TP_STRUCT__entry(
282*4882a593Smuzhiyun 		__field(int, id)
283*4882a593Smuzhiyun 		__array(char, buf, GVT_TEMP_STR_LEN)
284*4882a593Smuzhiyun 		__field(unsigned int, reg)
285*4882a593Smuzhiyun 		__field(unsigned int, new_val)
286*4882a593Smuzhiyun 		__field(unsigned int, old_val)
287*4882a593Smuzhiyun 		__field(bool, changed)
288*4882a593Smuzhiyun 	),
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun 	TP_fast_assign(
291*4882a593Smuzhiyun 		__entry->id = id;
292*4882a593Smuzhiyun 		snprintf(__entry->buf, GVT_TEMP_STR_LEN, "%s", reg_name);
293*4882a593Smuzhiyun 		__entry->reg = reg;
294*4882a593Smuzhiyun 		__entry->new_val = new_val;
295*4882a593Smuzhiyun 		__entry->old_val = old_val;
296*4882a593Smuzhiyun 		__entry->changed = changed;
297*4882a593Smuzhiyun 	),
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun 	TP_printk("VM%u write [%s] %x, new %08x, old %08x, changed %08x\n",
300*4882a593Smuzhiyun 		  __entry->id, __entry->buf, __entry->reg, __entry->new_val,
301*4882a593Smuzhiyun 		  __entry->old_val, __entry->changed)
302*4882a593Smuzhiyun );
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun TRACE_EVENT(propagate_event,
305*4882a593Smuzhiyun 	TP_PROTO(int id, const char *irq_name, int bit),
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun 	TP_ARGS(id, irq_name, bit),
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun 	TP_STRUCT__entry(
310*4882a593Smuzhiyun 		__field(int, id)
311*4882a593Smuzhiyun 		__array(char, buf, GVT_TEMP_STR_LEN)
312*4882a593Smuzhiyun 		__field(int, bit)
313*4882a593Smuzhiyun 	),
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun 	TP_fast_assign(
316*4882a593Smuzhiyun 		__entry->id = id;
317*4882a593Smuzhiyun 		snprintf(__entry->buf, GVT_TEMP_STR_LEN, "%s", irq_name);
318*4882a593Smuzhiyun 		__entry->bit = bit;
319*4882a593Smuzhiyun 	),
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun 	TP_printk("Set bit (%d) for (%s) for vgpu (%d)\n",
322*4882a593Smuzhiyun 		  __entry->bit, __entry->buf, __entry->id)
323*4882a593Smuzhiyun );
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun TRACE_EVENT(inject_msi,
326*4882a593Smuzhiyun 	TP_PROTO(int id, unsigned int address, unsigned int data),
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun 	TP_ARGS(id, address, data),
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun 	TP_STRUCT__entry(
331*4882a593Smuzhiyun 		__field(int, id)
332*4882a593Smuzhiyun 		__field(unsigned int, address)
333*4882a593Smuzhiyun 		__field(unsigned int, data)
334*4882a593Smuzhiyun 	),
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun 	TP_fast_assign(
337*4882a593Smuzhiyun 		__entry->id = id;
338*4882a593Smuzhiyun 		__entry->address = address;
339*4882a593Smuzhiyun 		__entry->data = data;
340*4882a593Smuzhiyun 	),
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun 	TP_printk("vgpu%d:inject msi address %x data %x\n",
343*4882a593Smuzhiyun 		  __entry->id, __entry->address, __entry->data)
344*4882a593Smuzhiyun );
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun TRACE_EVENT(render_mmio,
347*4882a593Smuzhiyun 	TP_PROTO(int old_id, int new_id, char *action, unsigned int reg,
348*4882a593Smuzhiyun 		 unsigned int old_val, unsigned int new_val),
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun 	TP_ARGS(old_id, new_id, action, reg, old_val, new_val),
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun 	TP_STRUCT__entry(
353*4882a593Smuzhiyun 		__field(int, old_id)
354*4882a593Smuzhiyun 		__field(int, new_id)
355*4882a593Smuzhiyun 		__array(char, buf, GVT_TEMP_STR_LEN)
356*4882a593Smuzhiyun 		__field(unsigned int, reg)
357*4882a593Smuzhiyun 		__field(unsigned int, old_val)
358*4882a593Smuzhiyun 		__field(unsigned int, new_val)
359*4882a593Smuzhiyun 	),
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun 	TP_fast_assign(
362*4882a593Smuzhiyun 		__entry->old_id = old_id;
363*4882a593Smuzhiyun 		__entry->new_id = new_id;
364*4882a593Smuzhiyun 		snprintf(__entry->buf, GVT_TEMP_STR_LEN, "%s", action);
365*4882a593Smuzhiyun 		__entry->reg = reg;
366*4882a593Smuzhiyun 		__entry->old_val = old_val;
367*4882a593Smuzhiyun 		__entry->new_val = new_val;
368*4882a593Smuzhiyun 	),
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun 	TP_printk("VM%u -> VM%u %s reg %x, old %08x new %08x\n",
371*4882a593Smuzhiyun 		  __entry->old_id, __entry->new_id,
372*4882a593Smuzhiyun 		  __entry->buf, __entry->reg,
373*4882a593Smuzhiyun 		  __entry->old_val, __entry->new_val)
374*4882a593Smuzhiyun );
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun #endif /* _GVT_TRACE_H_ */
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun /* This part must be out of protection */
379*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
380*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
381*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE
382*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace
383*4882a593Smuzhiyun #include <trace/define_trace.h>
384