xref: /OK3568_Linux_fs/kernel/arch/s390/kvm/trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
3*4882a593Smuzhiyun #define _TRACE_KVM_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <linux/tracepoint.h>
6*4882a593Smuzhiyun #include <asm/sie.h>
7*4882a593Smuzhiyun #include <asm/debug.h>
8*4882a593Smuzhiyun #include <asm/dis.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #undef TRACE_SYSTEM
11*4882a593Smuzhiyun #define TRACE_SYSTEM kvm
12*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
13*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE
14*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /*
17*4882a593Smuzhiyun  * Helpers for vcpu-specific tracepoints containing the same information
18*4882a593Smuzhiyun  * as s390dbf VCPU_EVENTs.
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun #define VCPU_PROTO_COMMON struct kvm_vcpu *vcpu
21*4882a593Smuzhiyun #define VCPU_ARGS_COMMON vcpu
22*4882a593Smuzhiyun #define VCPU_FIELD_COMMON __field(int, id)			\
23*4882a593Smuzhiyun 	__field(unsigned long, pswmask)				\
24*4882a593Smuzhiyun 	__field(unsigned long, pswaddr)
25*4882a593Smuzhiyun #define VCPU_ASSIGN_COMMON do {						\
26*4882a593Smuzhiyun 	__entry->id = vcpu->vcpu_id;					\
27*4882a593Smuzhiyun 	__entry->pswmask = vcpu->arch.sie_block->gpsw.mask;		\
28*4882a593Smuzhiyun 	__entry->pswaddr = vcpu->arch.sie_block->gpsw.addr;		\
29*4882a593Smuzhiyun 	} while (0);
30*4882a593Smuzhiyun #define VCPU_TP_PRINTK(p_str, p_args...)				\
31*4882a593Smuzhiyun 	TP_printk("%02d[%016lx-%016lx]: " p_str, __entry->id,		\
32*4882a593Smuzhiyun 		  __entry->pswmask, __entry->pswaddr, p_args)
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_skey_related_inst,
35*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON),
36*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON),
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	    TP_STRUCT__entry(
39*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
40*4882a593Smuzhiyun 		    ),
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 	    TP_fast_assign(
43*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
44*4882a593Smuzhiyun 		    ),
45*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("%s", "storage key related instruction")
46*4882a593Smuzhiyun 	);
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_major_guest_pfault,
49*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON),
50*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON),
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun 	    TP_STRUCT__entry(
53*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
54*4882a593Smuzhiyun 		    ),
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun 	    TP_fast_assign(
57*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
58*4882a593Smuzhiyun 		    ),
59*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault")
60*4882a593Smuzhiyun 	);
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_pfault_init,
63*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
64*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun 	    TP_STRUCT__entry(
67*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
68*4882a593Smuzhiyun 		    __field(long, pfault_token)
69*4882a593Smuzhiyun 		    ),
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	    TP_fast_assign(
72*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
73*4882a593Smuzhiyun 		    __entry->pfault_token = pfault_token;
74*4882a593Smuzhiyun 		    ),
75*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("init pfault token %ld", __entry->pfault_token)
76*4882a593Smuzhiyun 	);
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_pfault_done,
79*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
80*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun 	    TP_STRUCT__entry(
83*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
84*4882a593Smuzhiyun 		    __field(long, pfault_token)
85*4882a593Smuzhiyun 		    ),
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun 	    TP_fast_assign(
88*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
89*4882a593Smuzhiyun 		    __entry->pfault_token = pfault_token;
90*4882a593Smuzhiyun 		    ),
91*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("done pfault token %ld", __entry->pfault_token)
92*4882a593Smuzhiyun 	);
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /*
95*4882a593Smuzhiyun  * Tracepoints for SIE entry and exit.
96*4882a593Smuzhiyun  */
97*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_sie_enter,
98*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, int cpuflags),
99*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, cpuflags),
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun 	    TP_STRUCT__entry(
102*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
103*4882a593Smuzhiyun 		    __field(int, cpuflags)
104*4882a593Smuzhiyun 		    ),
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun 	    TP_fast_assign(
107*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
108*4882a593Smuzhiyun 		    __entry->cpuflags = cpuflags;
109*4882a593Smuzhiyun 		    ),
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("entering sie flags %x", __entry->cpuflags)
112*4882a593Smuzhiyun 	);
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_sie_fault,
115*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON),
116*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON),
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun 	    TP_STRUCT__entry(
119*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
120*4882a593Smuzhiyun 		    ),
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun 	    TP_fast_assign(
123*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
124*4882a593Smuzhiyun 		    ),
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("%s", "fault in sie instruction")
127*4882a593Smuzhiyun 	);
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_sie_exit,
130*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, u8 icptcode),
131*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, icptcode),
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun 	    TP_STRUCT__entry(
134*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
135*4882a593Smuzhiyun 		    __field(u8, icptcode)
136*4882a593Smuzhiyun 		    ),
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun 	    TP_fast_assign(
139*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
140*4882a593Smuzhiyun 		    __entry->icptcode = icptcode;
141*4882a593Smuzhiyun 		    ),
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("exit sie icptcode %d (%s)", __entry->icptcode,
144*4882a593Smuzhiyun 			   __print_symbolic(__entry->icptcode,
145*4882a593Smuzhiyun 					    sie_intercept_code))
146*4882a593Smuzhiyun 	);
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun /*
149*4882a593Smuzhiyun  * Trace point for intercepted instructions.
150*4882a593Smuzhiyun  */
151*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_intercept_instruction,
152*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
153*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun 	    TP_STRUCT__entry(
156*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
157*4882a593Smuzhiyun 		    __field(__u64, instruction)
158*4882a593Smuzhiyun 		    ),
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun 	    TP_fast_assign(
161*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
162*4882a593Smuzhiyun 		    __entry->instruction = ((__u64)ipa << 48) |
163*4882a593Smuzhiyun 		    ((__u64)ipb << 16);
164*4882a593Smuzhiyun 		    ),
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("intercepted instruction %016llx (%s)",
167*4882a593Smuzhiyun 			   __entry->instruction,
168*4882a593Smuzhiyun 			   __print_symbolic(icpt_insn_decoder(__entry->instruction),
169*4882a593Smuzhiyun 					    icpt_insn_codes))
170*4882a593Smuzhiyun 	);
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /*
173*4882a593Smuzhiyun  * Trace point for intercepted program interruptions.
174*4882a593Smuzhiyun  */
175*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_intercept_prog,
176*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
177*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, code),
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun 	    TP_STRUCT__entry(
180*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
181*4882a593Smuzhiyun 		    __field(__u16, code)
182*4882a593Smuzhiyun 		    ),
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun 	    TP_fast_assign(
185*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
186*4882a593Smuzhiyun 		    __entry->code = code;
187*4882a593Smuzhiyun 		    ),
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("intercepted program interruption %04x (%s)",
190*4882a593Smuzhiyun 			   __entry->code,
191*4882a593Smuzhiyun 			   __print_symbolic(__entry->code,
192*4882a593Smuzhiyun 					    icpt_prog_codes))
193*4882a593Smuzhiyun 	);
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun /*
196*4882a593Smuzhiyun  * Trace point for validity intercepts.
197*4882a593Smuzhiyun  */
198*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_intercept_validity,
199*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 viwhy),
200*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, viwhy),
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun 	    TP_STRUCT__entry(
203*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
204*4882a593Smuzhiyun 		    __field(__u16, viwhy)
205*4882a593Smuzhiyun 		    ),
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun 	    TP_fast_assign(
208*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
209*4882a593Smuzhiyun 		    __entry->viwhy = viwhy;
210*4882a593Smuzhiyun 		    ),
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("got validity intercept %04x", __entry->viwhy)
213*4882a593Smuzhiyun 	);
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun /*
216*4882a593Smuzhiyun  * Trace points for instructions that are of special interest.
217*4882a593Smuzhiyun  */
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_sigp,
220*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr, \
221*4882a593Smuzhiyun 		     __u32 parameter),
222*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr, parameter),
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun 	    TP_STRUCT__entry(
225*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
226*4882a593Smuzhiyun 		    __field(__u8, order_code)
227*4882a593Smuzhiyun 		    __field(__u16, cpu_addr)
228*4882a593Smuzhiyun 		    __field(__u32, parameter)
229*4882a593Smuzhiyun 		    ),
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun 	    TP_fast_assign(
232*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
233*4882a593Smuzhiyun 		    __entry->order_code = order_code;
234*4882a593Smuzhiyun 		    __entry->cpu_addr = cpu_addr;
235*4882a593Smuzhiyun 		    __entry->parameter = parameter;
236*4882a593Smuzhiyun 		    ),
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("handle sigp order %02x (%s), cpu address %04x, " \
239*4882a593Smuzhiyun 			   "parameter %08x", __entry->order_code,
240*4882a593Smuzhiyun 			   __print_symbolic(__entry->order_code,
241*4882a593Smuzhiyun 					    sigp_order_codes),
242*4882a593Smuzhiyun 			   __entry->cpu_addr, __entry->parameter)
243*4882a593Smuzhiyun 	);
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_sigp_pei,
246*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr),
247*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr),
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun 	    TP_STRUCT__entry(
250*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
251*4882a593Smuzhiyun 		    __field(__u8, order_code)
252*4882a593Smuzhiyun 		    __field(__u16, cpu_addr)
253*4882a593Smuzhiyun 		    ),
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun 	    TP_fast_assign(
256*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
257*4882a593Smuzhiyun 		    __entry->order_code = order_code;
258*4882a593Smuzhiyun 		    __entry->cpu_addr = cpu_addr;
259*4882a593Smuzhiyun 		    ),
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("handle sigp pei order %02x (%s), cpu address %04x",
262*4882a593Smuzhiyun 			   __entry->order_code,
263*4882a593Smuzhiyun 			   __print_symbolic(__entry->order_code,
264*4882a593Smuzhiyun 					    sigp_order_codes),
265*4882a593Smuzhiyun 			   __entry->cpu_addr)
266*4882a593Smuzhiyun 	);
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_diag,
269*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
270*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, code),
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun 	    TP_STRUCT__entry(
273*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
274*4882a593Smuzhiyun 		    __field(__u16, code)
275*4882a593Smuzhiyun 		    ),
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun 	    TP_fast_assign(
278*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
279*4882a593Smuzhiyun 		    __entry->code = code;
280*4882a593Smuzhiyun 		    ),
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("handle diagnose call %04x (%s)", __entry->code,
283*4882a593Smuzhiyun 			   __print_symbolic(__entry->code, diagnose_codes))
284*4882a593Smuzhiyun 	);
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_lctl,
287*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
288*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun 	    TP_STRUCT__entry(
291*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
292*4882a593Smuzhiyun 		    __field(int, g)
293*4882a593Smuzhiyun 		    __field(int, reg1)
294*4882a593Smuzhiyun 		    __field(int, reg3)
295*4882a593Smuzhiyun 		    __field(u64, addr)
296*4882a593Smuzhiyun 		    ),
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 	    TP_fast_assign(
299*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
300*4882a593Smuzhiyun 		    __entry->g = g;
301*4882a593Smuzhiyun 		    __entry->reg1 = reg1;
302*4882a593Smuzhiyun 		    __entry->reg3 = reg3;
303*4882a593Smuzhiyun 		    __entry->addr = addr;
304*4882a593Smuzhiyun 		    ),
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("%s: loading cr %x-%x from %016llx",
307*4882a593Smuzhiyun 			   __entry->g ? "lctlg" : "lctl",
308*4882a593Smuzhiyun 			   __entry->reg1, __entry->reg3, __entry->addr)
309*4882a593Smuzhiyun 	);
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stctl,
312*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
313*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun 	    TP_STRUCT__entry(
316*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
317*4882a593Smuzhiyun 		    __field(int, g)
318*4882a593Smuzhiyun 		    __field(int, reg1)
319*4882a593Smuzhiyun 		    __field(int, reg3)
320*4882a593Smuzhiyun 		    __field(u64, addr)
321*4882a593Smuzhiyun 		    ),
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun 	    TP_fast_assign(
324*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
325*4882a593Smuzhiyun 		    __entry->g = g;
326*4882a593Smuzhiyun 		    __entry->reg1 = reg1;
327*4882a593Smuzhiyun 		    __entry->reg3 = reg3;
328*4882a593Smuzhiyun 		    __entry->addr = addr;
329*4882a593Smuzhiyun 		    ),
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("%s: storing cr %x-%x to %016llx",
332*4882a593Smuzhiyun 			   __entry->g ? "stctg" : "stctl",
333*4882a593Smuzhiyun 			   __entry->reg1, __entry->reg3, __entry->addr)
334*4882a593Smuzhiyun 	);
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_prefix,
337*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, int set, u32 address),
338*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, set, address),
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun 	    TP_STRUCT__entry(
341*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
342*4882a593Smuzhiyun 		    __field(int, set)
343*4882a593Smuzhiyun 		    __field(u32, address)
344*4882a593Smuzhiyun 		    ),
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun 	    TP_fast_assign(
347*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
348*4882a593Smuzhiyun 		    __entry->set = set;
349*4882a593Smuzhiyun 		    __entry->address = address;
350*4882a593Smuzhiyun 		    ),
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("%s prefix to %08x",
353*4882a593Smuzhiyun 			   __entry->set ? "setting" : "storing",
354*4882a593Smuzhiyun 			   __entry->address)
355*4882a593Smuzhiyun 	);
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stap,
358*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, u64 address),
359*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, address),
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun 	    TP_STRUCT__entry(
362*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
363*4882a593Smuzhiyun 		    __field(u64, address)
364*4882a593Smuzhiyun 		    ),
365*4882a593Smuzhiyun 
366*4882a593Smuzhiyun 	    TP_fast_assign(
367*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
368*4882a593Smuzhiyun 		    __entry->address = address;
369*4882a593Smuzhiyun 		    ),
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("storing cpu address to %016llx",
372*4882a593Smuzhiyun 			   __entry->address)
373*4882a593Smuzhiyun 	);
374*4882a593Smuzhiyun 
375*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stfl,
376*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, unsigned int facility_list),
377*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, facility_list),
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun 	    TP_STRUCT__entry(
380*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
381*4882a593Smuzhiyun 		    __field(unsigned int, facility_list)
382*4882a593Smuzhiyun 		    ),
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun 	    TP_fast_assign(
385*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
386*4882a593Smuzhiyun 		    __entry->facility_list = facility_list;
387*4882a593Smuzhiyun 		    ),
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("store facility list value %08x",
390*4882a593Smuzhiyun 			   __entry->facility_list)
391*4882a593Smuzhiyun 	);
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stsi,
394*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, int fc, int sel1, int sel2, u64 addr),
395*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, fc, sel1, sel2, addr),
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun 	    TP_STRUCT__entry(
398*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
399*4882a593Smuzhiyun 		    __field(int, fc)
400*4882a593Smuzhiyun 		    __field(int, sel1)
401*4882a593Smuzhiyun 		    __field(int, sel2)
402*4882a593Smuzhiyun 		    __field(u64, addr)
403*4882a593Smuzhiyun 		    ),
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun 	    TP_fast_assign(
406*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
407*4882a593Smuzhiyun 		    __entry->fc = fc;
408*4882a593Smuzhiyun 		    __entry->sel1 = sel1;
409*4882a593Smuzhiyun 		    __entry->sel2 = sel2;
410*4882a593Smuzhiyun 		    __entry->addr = addr;
411*4882a593Smuzhiyun 		    ),
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("STSI %d.%d.%d information stored to %016llx",
414*4882a593Smuzhiyun 			   __entry->fc, __entry->sel1, __entry->sel2,
415*4882a593Smuzhiyun 			   __entry->addr)
416*4882a593Smuzhiyun 	);
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_operexc,
419*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
420*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
421*4882a593Smuzhiyun 
422*4882a593Smuzhiyun 	    TP_STRUCT__entry(
423*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
424*4882a593Smuzhiyun 		    __field(__u64, instruction)
425*4882a593Smuzhiyun 		    ),
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun 	    TP_fast_assign(
428*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
429*4882a593Smuzhiyun 		    __entry->instruction = ((__u64)ipa << 48) |
430*4882a593Smuzhiyun 		    ((__u64)ipb << 16);
431*4882a593Smuzhiyun 		    ),
432*4882a593Smuzhiyun 
433*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("operation exception on instruction %016llx (%s)",
434*4882a593Smuzhiyun 			   __entry->instruction,
435*4882a593Smuzhiyun 			   __print_symbolic(icpt_insn_decoder(__entry->instruction),
436*4882a593Smuzhiyun 					    icpt_insn_codes))
437*4882a593Smuzhiyun 	);
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_sthyi,
440*4882a593Smuzhiyun 	    TP_PROTO(VCPU_PROTO_COMMON, u64 code, u64 addr),
441*4882a593Smuzhiyun 	    TP_ARGS(VCPU_ARGS_COMMON, code, addr),
442*4882a593Smuzhiyun 
443*4882a593Smuzhiyun 	    TP_STRUCT__entry(
444*4882a593Smuzhiyun 		    VCPU_FIELD_COMMON
445*4882a593Smuzhiyun 		    __field(u64, code)
446*4882a593Smuzhiyun 		    __field(u64, addr)
447*4882a593Smuzhiyun 		    ),
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun 	    TP_fast_assign(
450*4882a593Smuzhiyun 		    VCPU_ASSIGN_COMMON
451*4882a593Smuzhiyun 		    __entry->code = code;
452*4882a593Smuzhiyun 		    __entry->addr = addr;
453*4882a593Smuzhiyun 		    ),
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun 	    VCPU_TP_PRINTK("STHYI fc: %llu addr: %016llx",
456*4882a593Smuzhiyun 			   __entry->code, __entry->addr)
457*4882a593Smuzhiyun 	);
458*4882a593Smuzhiyun 
459*4882a593Smuzhiyun #endif /* _TRACE_KVM_H */
460*4882a593Smuzhiyun 
461*4882a593Smuzhiyun /* This part must be outside protection */
462*4882a593Smuzhiyun #include <trace/define_trace.h>
463