1 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
4 #include <linux/tracepoint.h>
10 #define TRACE_SYSTEM kvm
11 #define TRACE_INCLUDE_PATH .
12 #undef TRACE_INCLUDE_FILE
13 #define TRACE_INCLUDE_FILE trace
16 * Helpers for vcpu-specific tracepoints containing the same information
17 * as s390dbf VCPU_EVENTs.
19 #define VCPU_PROTO_COMMON struct kvm_vcpu *vcpu
20 #define VCPU_ARGS_COMMON vcpu
21 #define VCPU_FIELD_COMMON __field(int, id) \
22 __field(unsigned long, pswmask) \
23 __field(unsigned long, pswaddr)
24 #define VCPU_ASSIGN_COMMON do { \
25 __entry->id = vcpu->vcpu_id; \
26 __entry->pswmask = vcpu->arch.sie_block->gpsw.mask; \
27 __entry->pswaddr = vcpu->arch.sie_block->gpsw.addr; \
29 #define VCPU_TP_PRINTK(p_str, p_args...) \
30 TP_printk("%02d[%016lx-%016lx]: " p_str, __entry->id, \
31 __entry->pswmask, __entry->pswaddr, p_args)
33 TRACE_EVENT(kvm_s390_skey_related_inst
,
34 TP_PROTO(VCPU_PROTO_COMMON
),
35 TP_ARGS(VCPU_ARGS_COMMON
),
44 VCPU_TP_PRINTK("%s", "storage key related instruction")
47 TRACE_EVENT(kvm_s390_major_guest_pfault
,
48 TP_PROTO(VCPU_PROTO_COMMON
),
49 TP_ARGS(VCPU_ARGS_COMMON
),
58 VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault")
61 TRACE_EVENT(kvm_s390_pfault_init
,
62 TP_PROTO(VCPU_PROTO_COMMON
, long pfault_token
),
63 TP_ARGS(VCPU_ARGS_COMMON
, pfault_token
),
67 __field(long, pfault_token
)
72 __entry
->pfault_token
= pfault_token
;
74 VCPU_TP_PRINTK("init pfault token %ld", __entry
->pfault_token
)
77 TRACE_EVENT(kvm_s390_pfault_done
,
78 TP_PROTO(VCPU_PROTO_COMMON
, long pfault_token
),
79 TP_ARGS(VCPU_ARGS_COMMON
, pfault_token
),
83 __field(long, pfault_token
)
88 __entry
->pfault_token
= pfault_token
;
90 VCPU_TP_PRINTK("done pfault token %ld", __entry
->pfault_token
)
94 * Tracepoints for SIE entry and exit.
96 TRACE_EVENT(kvm_s390_sie_enter
,
97 TP_PROTO(VCPU_PROTO_COMMON
, int cpuflags
),
98 TP_ARGS(VCPU_ARGS_COMMON
, cpuflags
),
102 __field(int, cpuflags
)
107 __entry
->cpuflags
= cpuflags
;
110 VCPU_TP_PRINTK("entering sie flags %x", __entry
->cpuflags
)
113 TRACE_EVENT(kvm_s390_sie_fault
,
114 TP_PROTO(VCPU_PROTO_COMMON
),
115 TP_ARGS(VCPU_ARGS_COMMON
),
125 VCPU_TP_PRINTK("%s", "fault in sie instruction")
128 TRACE_EVENT(kvm_s390_sie_exit
,
129 TP_PROTO(VCPU_PROTO_COMMON
, u8 icptcode
),
130 TP_ARGS(VCPU_ARGS_COMMON
, icptcode
),
134 __field(u8
, icptcode
)
139 __entry
->icptcode
= icptcode
;
142 VCPU_TP_PRINTK("exit sie icptcode %d (%s)", __entry
->icptcode
,
143 __print_symbolic(__entry
->icptcode
,
148 * Trace point for intercepted instructions.
150 TRACE_EVENT(kvm_s390_intercept_instruction
,
151 TP_PROTO(VCPU_PROTO_COMMON
, __u16 ipa
, __u32 ipb
),
152 TP_ARGS(VCPU_ARGS_COMMON
, ipa
, ipb
),
156 __field(__u64
, instruction
)
161 __entry
->instruction
= ((__u64
)ipa
<< 48) |
165 VCPU_TP_PRINTK("intercepted instruction %016llx (%s)",
166 __entry
->instruction
,
167 __print_symbolic(icpt_insn_decoder(__entry
->instruction
),
172 * Trace point for intercepted program interruptions.
174 TRACE_EVENT(kvm_s390_intercept_prog
,
175 TP_PROTO(VCPU_PROTO_COMMON
, __u16 code
),
176 TP_ARGS(VCPU_ARGS_COMMON
, code
),
185 __entry
->code
= code
;
188 VCPU_TP_PRINTK("intercepted program interruption %04x (%s)",
190 __print_symbolic(__entry
->code
,
195 * Trace point for validity intercepts.
197 TRACE_EVENT(kvm_s390_intercept_validity
,
198 TP_PROTO(VCPU_PROTO_COMMON
, __u16 viwhy
),
199 TP_ARGS(VCPU_ARGS_COMMON
, viwhy
),
203 __field(__u16
, viwhy
)
208 __entry
->viwhy
= viwhy
;
211 VCPU_TP_PRINTK("got validity intercept %04x", __entry
->viwhy
)
215 * Trace points for instructions that are of special interest.
218 TRACE_EVENT(kvm_s390_handle_sigp
,
219 TP_PROTO(VCPU_PROTO_COMMON
, __u8 order_code
, __u16 cpu_addr
, \
221 TP_ARGS(VCPU_ARGS_COMMON
, order_code
, cpu_addr
, parameter
),
225 __field(__u8
, order_code
)
226 __field(__u16
, cpu_addr
)
227 __field(__u32
, parameter
)
232 __entry
->order_code
= order_code
;
233 __entry
->cpu_addr
= cpu_addr
;
234 __entry
->parameter
= parameter
;
237 VCPU_TP_PRINTK("handle sigp order %02x (%s), cpu address %04x, " \
238 "parameter %08x", __entry
->order_code
,
239 __print_symbolic(__entry
->order_code
,
241 __entry
->cpu_addr
, __entry
->parameter
)
244 TRACE_EVENT(kvm_s390_handle_sigp_pei
,
245 TP_PROTO(VCPU_PROTO_COMMON
, __u8 order_code
, __u16 cpu_addr
),
246 TP_ARGS(VCPU_ARGS_COMMON
, order_code
, cpu_addr
),
250 __field(__u8
, order_code
)
251 __field(__u16
, cpu_addr
)
256 __entry
->order_code
= order_code
;
257 __entry
->cpu_addr
= cpu_addr
;
260 VCPU_TP_PRINTK("handle sigp pei order %02x (%s), cpu address %04x",
262 __print_symbolic(__entry
->order_code
,
267 TRACE_EVENT(kvm_s390_handle_diag
,
268 TP_PROTO(VCPU_PROTO_COMMON
, __u16 code
),
269 TP_ARGS(VCPU_ARGS_COMMON
, code
),
278 __entry
->code
= code
;
281 VCPU_TP_PRINTK("handle diagnose call %04x (%s)", __entry
->code
,
282 __print_symbolic(__entry
->code
, diagnose_codes
))
285 TRACE_EVENT(kvm_s390_handle_lctl
,
286 TP_PROTO(VCPU_PROTO_COMMON
, int g
, int reg1
, int reg3
, u64 addr
),
287 TP_ARGS(VCPU_ARGS_COMMON
, g
, reg1
, reg3
, addr
),
300 __entry
->reg1
= reg1
;
301 __entry
->reg3
= reg3
;
302 __entry
->addr
= addr
;
305 VCPU_TP_PRINTK("%s: loading cr %x-%x from %016llx",
306 __entry
->g
? "lctlg" : "lctl",
307 __entry
->reg1
, __entry
->reg3
, __entry
->addr
)
310 TRACE_EVENT(kvm_s390_handle_stctl
,
311 TP_PROTO(VCPU_PROTO_COMMON
, int g
, int reg1
, int reg3
, u64 addr
),
312 TP_ARGS(VCPU_ARGS_COMMON
, g
, reg1
, reg3
, addr
),
325 __entry
->reg1
= reg1
;
326 __entry
->reg3
= reg3
;
327 __entry
->addr
= addr
;
330 VCPU_TP_PRINTK("%s: storing cr %x-%x to %016llx",
331 __entry
->g
? "stctg" : "stctl",
332 __entry
->reg1
, __entry
->reg3
, __entry
->addr
)
335 TRACE_EVENT(kvm_s390_handle_prefix
,
336 TP_PROTO(VCPU_PROTO_COMMON
, int set
, u32 address
),
337 TP_ARGS(VCPU_ARGS_COMMON
, set
, address
),
342 __field(u32
, address
)
348 __entry
->address
= address
;
351 VCPU_TP_PRINTK("%s prefix to %08x",
352 __entry
->set
? "setting" : "storing",
356 TRACE_EVENT(kvm_s390_handle_stap
,
357 TP_PROTO(VCPU_PROTO_COMMON
, u64 address
),
358 TP_ARGS(VCPU_ARGS_COMMON
, address
),
362 __field(u64
, address
)
367 __entry
->address
= address
;
370 VCPU_TP_PRINTK("storing cpu address to %016llx",
374 TRACE_EVENT(kvm_s390_handle_stfl
,
375 TP_PROTO(VCPU_PROTO_COMMON
, unsigned int facility_list
),
376 TP_ARGS(VCPU_ARGS_COMMON
, facility_list
),
380 __field(unsigned int, facility_list
)
385 __entry
->facility_list
= facility_list
;
388 VCPU_TP_PRINTK("store facility list value %08x",
389 __entry
->facility_list
)
392 TRACE_EVENT(kvm_s390_handle_stsi
,
393 TP_PROTO(VCPU_PROTO_COMMON
, int fc
, int sel1
, int sel2
, u64 addr
),
394 TP_ARGS(VCPU_ARGS_COMMON
, fc
, sel1
, sel2
, addr
),
407 __entry
->sel1
= sel1
;
408 __entry
->sel2
= sel2
;
409 __entry
->addr
= addr
;
412 VCPU_TP_PRINTK("STSI %d.%d.%d information stored to %016llx",
413 __entry
->fc
, __entry
->sel1
, __entry
->sel2
,
417 TRACE_EVENT(kvm_s390_handle_operexc
,
418 TP_PROTO(VCPU_PROTO_COMMON
, __u16 ipa
, __u32 ipb
),
419 TP_ARGS(VCPU_ARGS_COMMON
, ipa
, ipb
),
423 __field(__u64
, instruction
)
428 __entry
->instruction
= ((__u64
)ipa
<< 48) |
432 VCPU_TP_PRINTK("operation exception on instruction %016llx (%s)",
433 __entry
->instruction
,
434 __print_symbolic(icpt_insn_decoder(__entry
->instruction
),
438 TRACE_EVENT(kvm_s390_handle_sthyi
,
439 TP_PROTO(VCPU_PROTO_COMMON
, u64 code
, u64 addr
),
440 TP_ARGS(VCPU_ARGS_COMMON
, code
, addr
),
450 __entry
->code
= code
;
451 __entry
->addr
= addr
;
454 VCPU_TP_PRINTK("STHYI fc: %llu addr: %016llx",
455 __entry
->code
, __entry
->addr
)
458 #endif /* _TRACE_KVM_H */
460 /* This part must be outside protection */
461 #include <trace/define_trace.h>