Commit | Line | Data |
---|---|---|
ade38c31 CH |
1 | #if !defined(_TRACE_KVMS390_H) || defined(TRACE_HEADER_MULTI_READ) |
2 | #define _TRACE_KVMS390_H | |
3 | ||
4 | #include <linux/tracepoint.h> | |
5 | ||
6 | #undef TRACE_SYSTEM | |
7 | #define TRACE_SYSTEM kvm-s390 | |
8 | #define TRACE_INCLUDE_PATH . | |
9 | #undef TRACE_INCLUDE_FILE | |
10 | #define TRACE_INCLUDE_FILE trace-s390 | |
11 | ||
bd412022 SRRH |
12 | /* |
13 | * The TRACE_SYSTEM_VAR defaults to TRACE_SYSTEM, but must be a | |
14 | * legitimate C variable. It is not exported to user space. | |
15 | */ | |
16 | #undef TRACE_SYSTEM_VAR | |
17 | #define TRACE_SYSTEM_VAR kvm_s390 | |
18 | ||
ade38c31 CH |
19 | /* |
20 | * Trace point for the creation of the kvm instance. | |
21 | */ | |
22 | TRACE_EVENT(kvm_s390_create_vm, | |
23 | TP_PROTO(unsigned long type), | |
24 | TP_ARGS(type), | |
25 | ||
26 | TP_STRUCT__entry( | |
27 | __field(unsigned long, type) | |
28 | ), | |
29 | ||
30 | TP_fast_assign( | |
31 | __entry->type = type; | |
32 | ), | |
33 | ||
34 | TP_printk("create vm%s", | |
35 | __entry->type & KVM_VM_S390_UCONTROL ? " (UCONTROL)" : "") | |
36 | ); | |
37 | ||
38 | /* | |
39 | * Trace points for creation and destruction of vpcus. | |
40 | */ | |
41 | TRACE_EVENT(kvm_s390_create_vcpu, | |
42 | TP_PROTO(unsigned int id, struct kvm_vcpu *vcpu, | |
43 | struct kvm_s390_sie_block *sie_block), | |
44 | TP_ARGS(id, vcpu, sie_block), | |
45 | ||
46 | TP_STRUCT__entry( | |
47 | __field(unsigned int, id) | |
48 | __field(struct kvm_vcpu *, vcpu) | |
49 | __field(struct kvm_s390_sie_block *, sie_block) | |
50 | ), | |
51 | ||
52 | TP_fast_assign( | |
53 | __entry->id = id; | |
54 | __entry->vcpu = vcpu; | |
55 | __entry->sie_block = sie_block; | |
56 | ), | |
57 | ||
8335713a CB |
58 | TP_printk("create cpu %d at 0x%pK, sie block at 0x%pK", |
59 | __entry->id, __entry->vcpu, __entry->sie_block) | |
ade38c31 CH |
60 | ); |
61 | ||
62 | TRACE_EVENT(kvm_s390_destroy_vcpu, | |
63 | TP_PROTO(unsigned int id), | |
64 | TP_ARGS(id), | |
65 | ||
66 | TP_STRUCT__entry( | |
67 | __field(unsigned int, id) | |
68 | ), | |
69 | ||
70 | TP_fast_assign( | |
71 | __entry->id = id; | |
72 | ), | |
73 | ||
74 | TP_printk("destroy cpu %d", __entry->id) | |
75 | ); | |
76 | ||
6852d7b6 DH |
77 | /* |
78 | * Trace point for start and stop of vpcus. | |
79 | */ | |
80 | TRACE_EVENT(kvm_s390_vcpu_start_stop, | |
81 | TP_PROTO(unsigned int id, int state), | |
82 | TP_ARGS(id, state), | |
83 | ||
84 | TP_STRUCT__entry( | |
85 | __field(unsigned int, id) | |
86 | __field(int, state) | |
87 | ), | |
88 | ||
89 | TP_fast_assign( | |
90 | __entry->id = id; | |
91 | __entry->state = state; | |
92 | ), | |
93 | ||
94 | TP_printk("%s cpu %d", __entry->state ? "starting" : "stopping", | |
95 | __entry->id) | |
96 | ); | |
97 | ||
ade38c31 CH |
98 | /* |
99 | * Trace points for injection of interrupts, either per machine or | |
100 | * per vcpu. | |
101 | */ | |
102 | ||
103 | #define kvm_s390_int_type \ | |
104 | {KVM_S390_SIGP_STOP, "sigp stop"}, \ | |
105 | {KVM_S390_PROGRAM_INT, "program interrupt"}, \ | |
106 | {KVM_S390_SIGP_SET_PREFIX, "sigp set prefix"}, \ | |
107 | {KVM_S390_RESTART, "sigp restart"}, \ | |
a37281b6 DH |
108 | {KVM_S390_INT_PFAULT_INIT, "pfault init"}, \ |
109 | {KVM_S390_INT_PFAULT_DONE, "pfault done"}, \ | |
110 | {KVM_S390_MCHK, "machine check"}, \ | |
111 | {KVM_S390_INT_CLOCK_COMP, "clock comparator"}, \ | |
112 | {KVM_S390_INT_CPU_TIMER, "cpu timer"}, \ | |
ade38c31 CH |
113 | {KVM_S390_INT_VIRTIO, "virtio interrupt"}, \ |
114 | {KVM_S390_INT_SERVICE, "sclp interrupt"}, \ | |
115 | {KVM_S390_INT_EMERGENCY, "sigp emergency"}, \ | |
116 | {KVM_S390_INT_EXTERNAL_CALL, "sigp ext call"} | |
117 | ||
a37281b6 DH |
118 | #define get_irq_name(__type) \ |
119 | (__type > KVM_S390_INT_IO_MAX ? \ | |
120 | __print_symbolic(__type, kvm_s390_int_type) : \ | |
121 | (__type & KVM_S390_INT_IO_AI_MASK ? \ | |
122 | "adapter I/O interrupt" : "subchannel I/O interrupt")) | |
123 | ||
ade38c31 CH |
124 | TRACE_EVENT(kvm_s390_inject_vm, |
125 | TP_PROTO(__u64 type, __u32 parm, __u64 parm64, int who), | |
126 | TP_ARGS(type, parm, parm64, who), | |
127 | ||
128 | TP_STRUCT__entry( | |
129 | __field(__u32, inttype) | |
130 | __field(__u32, parm) | |
131 | __field(__u64, parm64) | |
132 | __field(int, who) | |
133 | ), | |
134 | ||
135 | TP_fast_assign( | |
136 | __entry->inttype = type & 0x00000000ffffffff; | |
137 | __entry->parm = parm; | |
138 | __entry->parm64 = parm64; | |
139 | __entry->who = who; | |
140 | ), | |
141 | ||
142 | TP_printk("inject%s: type:%x (%s) parm:%x parm64:%llx", | |
143 | (__entry->who == 1) ? " (from kernel)" : | |
144 | (__entry->who == 2) ? " (from user)" : "", | |
a37281b6 | 145 | __entry->inttype, get_irq_name(__entry->inttype), |
ade38c31 CH |
146 | __entry->parm, __entry->parm64) |
147 | ); | |
148 | ||
149 | TRACE_EVENT(kvm_s390_inject_vcpu, | |
ed2afcfa DH |
150 | TP_PROTO(unsigned int id, __u64 type, __u32 parm, __u64 parm64), |
151 | TP_ARGS(id, type, parm, parm64), | |
ade38c31 CH |
152 | |
153 | TP_STRUCT__entry( | |
154 | __field(int, id) | |
155 | __field(__u32, inttype) | |
156 | __field(__u32, parm) | |
157 | __field(__u64, parm64) | |
ade38c31 CH |
158 | ), |
159 | ||
160 | TP_fast_assign( | |
161 | __entry->id = id; | |
162 | __entry->inttype = type & 0x00000000ffffffff; | |
163 | __entry->parm = parm; | |
164 | __entry->parm64 = parm64; | |
ade38c31 CH |
165 | ), |
166 | ||
ed2afcfa | 167 | TP_printk("inject (vcpu %d): type:%x (%s) parm:%x parm64:%llx", |
ade38c31 | 168 | __entry->id, __entry->inttype, |
a37281b6 DH |
169 | get_irq_name(__entry->inttype), __entry->parm, |
170 | __entry->parm64) | |
ade38c31 CH |
171 | ); |
172 | ||
173 | /* | |
174 | * Trace point for the actual delivery of interrupts. | |
175 | */ | |
176 | TRACE_EVENT(kvm_s390_deliver_interrupt, | |
48a3e950 | 177 | TP_PROTO(unsigned int id, __u64 type, __u64 data0, __u64 data1), |
ade38c31 CH |
178 | TP_ARGS(id, type, data0, data1), |
179 | ||
180 | TP_STRUCT__entry( | |
181 | __field(int, id) | |
182 | __field(__u32, inttype) | |
48a3e950 | 183 | __field(__u64, data0) |
ade38c31 CH |
184 | __field(__u64, data1) |
185 | ), | |
186 | ||
187 | TP_fast_assign( | |
188 | __entry->id = id; | |
189 | __entry->inttype = type & 0x00000000ffffffff; | |
190 | __entry->data0 = data0; | |
191 | __entry->data1 = data1; | |
192 | ), | |
193 | ||
194 | TP_printk("deliver interrupt (vcpu %d): type:%x (%s) " \ | |
48a3e950 | 195 | "data:%08llx %016llx", |
ade38c31 | 196 | __entry->id, __entry->inttype, |
a37281b6 DH |
197 | get_irq_name(__entry->inttype), __entry->data0, |
198 | __entry->data1) | |
ade38c31 CH |
199 | ); |
200 | ||
201 | /* | |
202 | * Trace point for resets that may be requested from userspace. | |
203 | */ | |
204 | TRACE_EVENT(kvm_s390_request_resets, | |
205 | TP_PROTO(__u64 resets), | |
206 | TP_ARGS(resets), | |
207 | ||
208 | TP_STRUCT__entry( | |
209 | __field(__u64, resets) | |
210 | ), | |
211 | ||
212 | TP_fast_assign( | |
213 | __entry->resets = resets; | |
214 | ), | |
215 | ||
216 | TP_printk("requesting userspace resets %llx", | |
217 | __entry->resets) | |
218 | ); | |
219 | ||
220 | /* | |
221 | * Trace point for a vcpu's stop requests. | |
222 | */ | |
223 | TRACE_EVENT(kvm_s390_stop_request, | |
6cddd432 DH |
224 | TP_PROTO(unsigned char stop_irq, unsigned char flags), |
225 | TP_ARGS(stop_irq, flags), | |
ade38c31 CH |
226 | |
227 | TP_STRUCT__entry( | |
6cddd432 DH |
228 | __field(unsigned char, stop_irq) |
229 | __field(unsigned char, flags) | |
ade38c31 CH |
230 | ), |
231 | ||
232 | TP_fast_assign( | |
6cddd432 DH |
233 | __entry->stop_irq = stop_irq; |
234 | __entry->flags = flags; | |
ade38c31 CH |
235 | ), |
236 | ||
6cddd432 DH |
237 | TP_printk("stop request, stop irq = %u, flags = %08x", |
238 | __entry->stop_irq, __entry->flags) | |
ade38c31 CH |
239 | ); |
240 | ||
241 | ||
fa6b7fe9 CH |
242 | /* |
243 | * Trace point for enabling channel I/O instruction support. | |
244 | */ | |
245 | TRACE_EVENT(kvm_s390_enable_css, | |
246 | TP_PROTO(void *kvm), | |
247 | TP_ARGS(kvm), | |
248 | ||
249 | TP_STRUCT__entry( | |
250 | __field(void *, kvm) | |
251 | ), | |
252 | ||
253 | TP_fast_assign( | |
254 | __entry->kvm = kvm; | |
255 | ), | |
256 | ||
8335713a | 257 | TP_printk("enabling channel I/O support (kvm @ %pK)\n", |
fa6b7fe9 CH |
258 | __entry->kvm) |
259 | ); | |
260 | ||
8ad35755 DH |
261 | /* |
262 | * Trace point for enabling and disabling interlocking-and-broadcasting | |
263 | * suppression. | |
264 | */ | |
265 | TRACE_EVENT(kvm_s390_enable_disable_ibs, | |
266 | TP_PROTO(unsigned int id, int state), | |
267 | TP_ARGS(id, state), | |
268 | ||
269 | TP_STRUCT__entry( | |
270 | __field(unsigned int, id) | |
271 | __field(int, state) | |
272 | ), | |
273 | ||
274 | TP_fast_assign( | |
275 | __entry->id = id; | |
276 | __entry->state = state; | |
277 | ), | |
278 | ||
279 | TP_printk("%s ibs on cpu %d", | |
280 | __entry->state ? "enabling" : "disabling", __entry->id) | |
281 | ); | |
282 | ||
fa6b7fe9 | 283 | |
ade38c31 CH |
284 | #endif /* _TRACE_KVMS390_H */ |
285 | ||
286 | /* This part must be outside protection */ | |
287 | #include <trace/define_trace.h> |