KVM: PPC: PR: Use generic tracepoint for guest exit
[deliverable/linux.git] / arch / powerpc / kvm / trace.h
1 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
2 #define _TRACE_KVM_H
3
4 #include <linux/tracepoint.h>
5
6 #undef TRACE_SYSTEM
7 #define TRACE_SYSTEM kvm
8 #define TRACE_INCLUDE_PATH .
9 #define TRACE_INCLUDE_FILE trace
10
11 /*
12 * Tracepoint for guest mode entry.
13 */
14 TRACE_EVENT(kvm_ppc_instr,
15 TP_PROTO(unsigned int inst, unsigned long _pc, unsigned int emulate),
16 TP_ARGS(inst, _pc, emulate),
17
18 TP_STRUCT__entry(
19 __field( unsigned int, inst )
20 __field( unsigned long, pc )
21 __field( unsigned int, emulate )
22 ),
23
24 TP_fast_assign(
25 __entry->inst = inst;
26 __entry->pc = _pc;
27 __entry->emulate = emulate;
28 ),
29
30 TP_printk("inst %u pc 0x%lx emulate %u\n",
31 __entry->inst, __entry->pc, __entry->emulate)
32 );
33
34 TRACE_EVENT(kvm_exit,
35 TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu),
36 TP_ARGS(exit_nr, vcpu),
37
38 TP_STRUCT__entry(
39 __field( unsigned int, exit_nr )
40 __field( unsigned long, pc )
41 __field( unsigned long, msr )
42 __field( unsigned long, dar )
43 #ifdef CONFIG_KVM_BOOK3S_PR
44 __field( unsigned long, srr1 )
45 #endif
46 __field( unsigned long, last_inst )
47 ),
48
49 TP_fast_assign(
50 #ifdef CONFIG_KVM_BOOK3S_PR
51 struct kvmppc_book3s_shadow_vcpu *svcpu;
52 #endif
53 __entry->exit_nr = exit_nr;
54 __entry->pc = kvmppc_get_pc(vcpu);
55 __entry->dar = kvmppc_get_fault_dar(vcpu);
56 __entry->msr = vcpu->arch.shared->msr;
57 #ifdef CONFIG_KVM_BOOK3S_PR
58 svcpu = svcpu_get(vcpu);
59 __entry->srr1 = svcpu->shadow_srr1;
60 svcpu_put(svcpu);
61 #endif
62 __entry->last_inst = vcpu->arch.last_inst;
63 ),
64
65 TP_printk("exit=0x%x"
66 " | pc=0x%lx"
67 " | msr=0x%lx"
68 " | dar=0x%lx"
69 #ifdef CONFIG_KVM_BOOK3S_PR
70 " | srr1=0x%lx"
71 #endif
72 " | last_inst=0x%lx"
73 ,
74 __entry->exit_nr,
75 __entry->pc,
76 __entry->msr,
77 __entry->dar,
78 #ifdef CONFIG_KVM_BOOK3S_PR
79 __entry->srr1,
80 #endif
81 __entry->last_inst
82 )
83 );
84
85 TRACE_EVENT(kvm_stlb_inval,
86 TP_PROTO(unsigned int stlb_index),
87 TP_ARGS(stlb_index),
88
89 TP_STRUCT__entry(
90 __field( unsigned int, stlb_index )
91 ),
92
93 TP_fast_assign(
94 __entry->stlb_index = stlb_index;
95 ),
96
97 TP_printk("stlb_index %u", __entry->stlb_index)
98 );
99
100 TRACE_EVENT(kvm_stlb_write,
101 TP_PROTO(unsigned int victim, unsigned int tid, unsigned int word0,
102 unsigned int word1, unsigned int word2),
103 TP_ARGS(victim, tid, word0, word1, word2),
104
105 TP_STRUCT__entry(
106 __field( unsigned int, victim )
107 __field( unsigned int, tid )
108 __field( unsigned int, word0 )
109 __field( unsigned int, word1 )
110 __field( unsigned int, word2 )
111 ),
112
113 TP_fast_assign(
114 __entry->victim = victim;
115 __entry->tid = tid;
116 __entry->word0 = word0;
117 __entry->word1 = word1;
118 __entry->word2 = word2;
119 ),
120
121 TP_printk("victim %u tid %u w0 %u w1 %u w2 %u",
122 __entry->victim, __entry->tid, __entry->word0,
123 __entry->word1, __entry->word2)
124 );
125
126 TRACE_EVENT(kvm_gtlb_write,
127 TP_PROTO(unsigned int gtlb_index, unsigned int tid, unsigned int word0,
128 unsigned int word1, unsigned int word2),
129 TP_ARGS(gtlb_index, tid, word0, word1, word2),
130
131 TP_STRUCT__entry(
132 __field( unsigned int, gtlb_index )
133 __field( unsigned int, tid )
134 __field( unsigned int, word0 )
135 __field( unsigned int, word1 )
136 __field( unsigned int, word2 )
137 ),
138
139 TP_fast_assign(
140 __entry->gtlb_index = gtlb_index;
141 __entry->tid = tid;
142 __entry->word0 = word0;
143 __entry->word1 = word1;
144 __entry->word2 = word2;
145 ),
146
147 TP_printk("gtlb_index %u tid %u w0 %u w1 %u w2 %u",
148 __entry->gtlb_index, __entry->tid, __entry->word0,
149 __entry->word1, __entry->word2)
150 );
151
152
153 /*************************************************************************
154 * Book3S trace points *
155 *************************************************************************/
156
157 #ifdef CONFIG_KVM_BOOK3S_PR
158
159 TRACE_EVENT(kvm_book3s_reenter,
160 TP_PROTO(int r, struct kvm_vcpu *vcpu),
161 TP_ARGS(r, vcpu),
162
163 TP_STRUCT__entry(
164 __field( unsigned int, r )
165 __field( unsigned long, pc )
166 ),
167
168 TP_fast_assign(
169 __entry->r = r;
170 __entry->pc = kvmppc_get_pc(vcpu);
171 ),
172
173 TP_printk("reentry r=%d | pc=0x%lx", __entry->r, __entry->pc)
174 );
175
176 #ifdef CONFIG_PPC_BOOK3S_64
177
178 TRACE_EVENT(kvm_book3s_64_mmu_map,
179 TP_PROTO(int rflags, ulong hpteg, ulong va, pfn_t hpaddr,
180 struct kvmppc_pte *orig_pte),
181 TP_ARGS(rflags, hpteg, va, hpaddr, orig_pte),
182
183 TP_STRUCT__entry(
184 __field( unsigned char, flag_w )
185 __field( unsigned char, flag_x )
186 __field( unsigned long, eaddr )
187 __field( unsigned long, hpteg )
188 __field( unsigned long, va )
189 __field( unsigned long long, vpage )
190 __field( unsigned long, hpaddr )
191 ),
192
193 TP_fast_assign(
194 __entry->flag_w = ((rflags & HPTE_R_PP) == 3) ? '-' : 'w';
195 __entry->flag_x = (rflags & HPTE_R_N) ? '-' : 'x';
196 __entry->eaddr = orig_pte->eaddr;
197 __entry->hpteg = hpteg;
198 __entry->va = va;
199 __entry->vpage = orig_pte->vpage;
200 __entry->hpaddr = hpaddr;
201 ),
202
203 TP_printk("KVM: %c%c Map 0x%lx: [%lx] 0x%lx (0x%llx) -> %lx",
204 __entry->flag_w, __entry->flag_x, __entry->eaddr,
205 __entry->hpteg, __entry->va, __entry->vpage, __entry->hpaddr)
206 );
207
208 #endif /* CONFIG_PPC_BOOK3S_64 */
209
210 TRACE_EVENT(kvm_book3s_mmu_map,
211 TP_PROTO(struct hpte_cache *pte),
212 TP_ARGS(pte),
213
214 TP_STRUCT__entry(
215 __field( u64, host_va )
216 __field( u64, pfn )
217 __field( ulong, eaddr )
218 __field( u64, vpage )
219 __field( ulong, raddr )
220 __field( int, flags )
221 ),
222
223 TP_fast_assign(
224 __entry->host_va = pte->host_va;
225 __entry->pfn = pte->pfn;
226 __entry->eaddr = pte->pte.eaddr;
227 __entry->vpage = pte->pte.vpage;
228 __entry->raddr = pte->pte.raddr;
229 __entry->flags = (pte->pte.may_read ? 0x4 : 0) |
230 (pte->pte.may_write ? 0x2 : 0) |
231 (pte->pte.may_execute ? 0x1 : 0);
232 ),
233
234 TP_printk("Map: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
235 __entry->host_va, __entry->pfn, __entry->eaddr,
236 __entry->vpage, __entry->raddr, __entry->flags)
237 );
238
239 TRACE_EVENT(kvm_book3s_mmu_invalidate,
240 TP_PROTO(struct hpte_cache *pte),
241 TP_ARGS(pte),
242
243 TP_STRUCT__entry(
244 __field( u64, host_va )
245 __field( u64, pfn )
246 __field( ulong, eaddr )
247 __field( u64, vpage )
248 __field( ulong, raddr )
249 __field( int, flags )
250 ),
251
252 TP_fast_assign(
253 __entry->host_va = pte->host_va;
254 __entry->pfn = pte->pfn;
255 __entry->eaddr = pte->pte.eaddr;
256 __entry->vpage = pte->pte.vpage;
257 __entry->raddr = pte->pte.raddr;
258 __entry->flags = (pte->pte.may_read ? 0x4 : 0) |
259 (pte->pte.may_write ? 0x2 : 0) |
260 (pte->pte.may_execute ? 0x1 : 0);
261 ),
262
263 TP_printk("Flush: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
264 __entry->host_va, __entry->pfn, __entry->eaddr,
265 __entry->vpage, __entry->raddr, __entry->flags)
266 );
267
268 TRACE_EVENT(kvm_book3s_mmu_flush,
269 TP_PROTO(const char *type, struct kvm_vcpu *vcpu, unsigned long long p1,
270 unsigned long long p2),
271 TP_ARGS(type, vcpu, p1, p2),
272
273 TP_STRUCT__entry(
274 __field( int, count )
275 __field( unsigned long long, p1 )
276 __field( unsigned long long, p2 )
277 __field( const char *, type )
278 ),
279
280 TP_fast_assign(
281 __entry->count = to_book3s(vcpu)->hpte_cache_count;
282 __entry->p1 = p1;
283 __entry->p2 = p2;
284 __entry->type = type;
285 ),
286
287 TP_printk("Flush %d %sPTEs: %llx - %llx",
288 __entry->count, __entry->type, __entry->p1, __entry->p2)
289 );
290
291 TRACE_EVENT(kvm_book3s_slb_found,
292 TP_PROTO(unsigned long long gvsid, unsigned long long hvsid),
293 TP_ARGS(gvsid, hvsid),
294
295 TP_STRUCT__entry(
296 __field( unsigned long long, gvsid )
297 __field( unsigned long long, hvsid )
298 ),
299
300 TP_fast_assign(
301 __entry->gvsid = gvsid;
302 __entry->hvsid = hvsid;
303 ),
304
305 TP_printk("%llx -> %llx", __entry->gvsid, __entry->hvsid)
306 );
307
308 TRACE_EVENT(kvm_book3s_slb_fail,
309 TP_PROTO(u16 sid_map_mask, unsigned long long gvsid),
310 TP_ARGS(sid_map_mask, gvsid),
311
312 TP_STRUCT__entry(
313 __field( unsigned short, sid_map_mask )
314 __field( unsigned long long, gvsid )
315 ),
316
317 TP_fast_assign(
318 __entry->sid_map_mask = sid_map_mask;
319 __entry->gvsid = gvsid;
320 ),
321
322 TP_printk("%x/%x: %llx", __entry->sid_map_mask,
323 SID_MAP_MASK - __entry->sid_map_mask, __entry->gvsid)
324 );
325
326 TRACE_EVENT(kvm_book3s_slb_map,
327 TP_PROTO(u16 sid_map_mask, unsigned long long gvsid,
328 unsigned long long hvsid),
329 TP_ARGS(sid_map_mask, gvsid, hvsid),
330
331 TP_STRUCT__entry(
332 __field( unsigned short, sid_map_mask )
333 __field( unsigned long long, guest_vsid )
334 __field( unsigned long long, host_vsid )
335 ),
336
337 TP_fast_assign(
338 __entry->sid_map_mask = sid_map_mask;
339 __entry->guest_vsid = gvsid;
340 __entry->host_vsid = hvsid;
341 ),
342
343 TP_printk("%x: %llx -> %llx", __entry->sid_map_mask,
344 __entry->guest_vsid, __entry->host_vsid)
345 );
346
347 TRACE_EVENT(kvm_book3s_slbmte,
348 TP_PROTO(u64 slb_vsid, u64 slb_esid),
349 TP_ARGS(slb_vsid, slb_esid),
350
351 TP_STRUCT__entry(
352 __field( u64, slb_vsid )
353 __field( u64, slb_esid )
354 ),
355
356 TP_fast_assign(
357 __entry->slb_vsid = slb_vsid;
358 __entry->slb_esid = slb_esid;
359 ),
360
361 TP_printk("%llx, %llx", __entry->slb_vsid, __entry->slb_esid)
362 );
363
364 #endif /* CONFIG_PPC_BOOK3S */
365
366
367 /*************************************************************************
368 * Book3E trace points *
369 *************************************************************************/
370
371 #ifdef CONFIG_BOOKE
372
373 TRACE_EVENT(kvm_booke206_stlb_write,
374 TP_PROTO(__u32 mas0, __u32 mas8, __u32 mas1, __u64 mas2, __u64 mas7_3),
375 TP_ARGS(mas0, mas8, mas1, mas2, mas7_3),
376
377 TP_STRUCT__entry(
378 __field( __u32, mas0 )
379 __field( __u32, mas8 )
380 __field( __u32, mas1 )
381 __field( __u64, mas2 )
382 __field( __u64, mas7_3 )
383 ),
384
385 TP_fast_assign(
386 __entry->mas0 = mas0;
387 __entry->mas8 = mas8;
388 __entry->mas1 = mas1;
389 __entry->mas2 = mas2;
390 __entry->mas7_3 = mas7_3;
391 ),
392
393 TP_printk("mas0=%x mas8=%x mas1=%x mas2=%llx mas7_3=%llx",
394 __entry->mas0, __entry->mas8, __entry->mas1,
395 __entry->mas2, __entry->mas7_3)
396 );
397
398 TRACE_EVENT(kvm_booke206_gtlb_write,
399 TP_PROTO(__u32 mas0, __u32 mas1, __u64 mas2, __u64 mas7_3),
400 TP_ARGS(mas0, mas1, mas2, mas7_3),
401
402 TP_STRUCT__entry(
403 __field( __u32, mas0 )
404 __field( __u32, mas1 )
405 __field( __u64, mas2 )
406 __field( __u64, mas7_3 )
407 ),
408
409 TP_fast_assign(
410 __entry->mas0 = mas0;
411 __entry->mas1 = mas1;
412 __entry->mas2 = mas2;
413 __entry->mas7_3 = mas7_3;
414 ),
415
416 TP_printk("mas0=%x mas1=%x mas2=%llx mas7_3=%llx",
417 __entry->mas0, __entry->mas1,
418 __entry->mas2, __entry->mas7_3)
419 );
420
421 #endif
422
423 #endif /* _TRACE_KVM_H */
424
425 /* This part must be outside protection */
426 #include <trace/define_trace.h>
This page took 0.051786 seconds and 5 git commands to generate.