diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /arch/x86/kvm/trace.h | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'arch/x86/kvm/trace.h')
-rw-r--r-- | arch/x86/kvm/trace.h | 224 |
1 files changed, 213 insertions, 11 deletions
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index 0d480e77eacf..6ad30a29f044 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h | |||
@@ -56,6 +56,38 @@ TRACE_EVENT(kvm_hypercall, | |||
56 | ); | 56 | ); |
57 | 57 | ||
58 | /* | 58 | /* |
59 | * Tracepoint for hypercall. | ||
60 | */ | ||
61 | TRACE_EVENT(kvm_hv_hypercall, | ||
62 | TP_PROTO(__u16 code, bool fast, __u16 rep_cnt, __u16 rep_idx, | ||
63 | __u64 ingpa, __u64 outgpa), | ||
64 | TP_ARGS(code, fast, rep_cnt, rep_idx, ingpa, outgpa), | ||
65 | |||
66 | TP_STRUCT__entry( | ||
67 | __field( __u16, code ) | ||
68 | __field( bool, fast ) | ||
69 | __field( __u16, rep_cnt ) | ||
70 | __field( __u16, rep_idx ) | ||
71 | __field( __u64, ingpa ) | ||
72 | __field( __u64, outgpa ) | ||
73 | ), | ||
74 | |||
75 | TP_fast_assign( | ||
76 | __entry->code = code; | ||
77 | __entry->fast = fast; | ||
78 | __entry->rep_cnt = rep_cnt; | ||
79 | __entry->rep_idx = rep_idx; | ||
80 | __entry->ingpa = ingpa; | ||
81 | __entry->outgpa = outgpa; | ||
82 | ), | ||
83 | |||
84 | TP_printk("code 0x%x %s cnt 0x%x idx 0x%x in 0x%llx out 0x%llx", | ||
85 | __entry->code, __entry->fast ? "fast" : "slow", | ||
86 | __entry->rep_cnt, __entry->rep_idx, __entry->ingpa, | ||
87 | __entry->outgpa) | ||
88 | ); | ||
89 | |||
90 | /* | ||
59 | * Tracepoint for PIO. | 91 | * Tracepoint for PIO. |
60 | */ | 92 | */ |
61 | TRACE_EVENT(kvm_pio, | 93 | TRACE_EVENT(kvm_pio, |
@@ -214,28 +246,33 @@ TRACE_EVENT(kvm_page_fault, | |||
214 | * Tracepoint for guest MSR access. | 246 | * Tracepoint for guest MSR access. |
215 | */ | 247 | */ |
216 | TRACE_EVENT(kvm_msr, | 248 | TRACE_EVENT(kvm_msr, |
217 | TP_PROTO(unsigned int rw, unsigned int ecx, unsigned long data), | 249 | TP_PROTO(unsigned write, u32 ecx, u64 data, bool exception), |
218 | TP_ARGS(rw, ecx, data), | 250 | TP_ARGS(write, ecx, data, exception), |
219 | 251 | ||
220 | TP_STRUCT__entry( | 252 | TP_STRUCT__entry( |
221 | __field( unsigned int, rw ) | 253 | __field( unsigned, write ) |
222 | __field( unsigned int, ecx ) | 254 | __field( u32, ecx ) |
223 | __field( unsigned long, data ) | 255 | __field( u64, data ) |
256 | __field( u8, exception ) | ||
224 | ), | 257 | ), |
225 | 258 | ||
226 | TP_fast_assign( | 259 | TP_fast_assign( |
227 | __entry->rw = rw; | 260 | __entry->write = write; |
228 | __entry->ecx = ecx; | 261 | __entry->ecx = ecx; |
229 | __entry->data = data; | 262 | __entry->data = data; |
263 | __entry->exception = exception; | ||
230 | ), | 264 | ), |
231 | 265 | ||
232 | TP_printk("msr_%s %x = 0x%lx", | 266 | TP_printk("msr_%s %x = 0x%llx%s", |
233 | __entry->rw ? "write" : "read", | 267 | __entry->write ? "write" : "read", |
234 | __entry->ecx, __entry->data) | 268 | __entry->ecx, __entry->data, |
269 | __entry->exception ? " (#GP)" : "") | ||
235 | ); | 270 | ); |
236 | 271 | ||
237 | #define trace_kvm_msr_read(ecx, data) trace_kvm_msr(0, ecx, data) | 272 | #define trace_kvm_msr_read(ecx, data) trace_kvm_msr(0, ecx, data, false) |
238 | #define trace_kvm_msr_write(ecx, data) trace_kvm_msr(1, ecx, data) | 273 | #define trace_kvm_msr_write(ecx, data) trace_kvm_msr(1, ecx, data, false) |
274 | #define trace_kvm_msr_read_ex(ecx) trace_kvm_msr(0, ecx, 0, true) | ||
275 | #define trace_kvm_msr_write_ex(ecx, data) trace_kvm_msr(1, ecx, data, true) | ||
239 | 276 | ||
240 | /* | 277 | /* |
241 | * Tracepoint for guest CR access. | 278 | * Tracepoint for guest CR access. |
@@ -349,6 +386,171 @@ TRACE_EVENT(kvm_apic_accept_irq, | |||
349 | __entry->coalesced ? " (coalesced)" : "") | 386 | __entry->coalesced ? " (coalesced)" : "") |
350 | ); | 387 | ); |
351 | 388 | ||
389 | /* | ||
390 | * Tracepoint for nested VMRUN | ||
391 | */ | ||
392 | TRACE_EVENT(kvm_nested_vmrun, | ||
393 | TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl, | ||
394 | __u32 event_inj, bool npt), | ||
395 | TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, npt), | ||
396 | |||
397 | TP_STRUCT__entry( | ||
398 | __field( __u64, rip ) | ||
399 | __field( __u64, vmcb ) | ||
400 | __field( __u64, nested_rip ) | ||
401 | __field( __u32, int_ctl ) | ||
402 | __field( __u32, event_inj ) | ||
403 | __field( bool, npt ) | ||
404 | ), | ||
405 | |||
406 | TP_fast_assign( | ||
407 | __entry->rip = rip; | ||
408 | __entry->vmcb = vmcb; | ||
409 | __entry->nested_rip = nested_rip; | ||
410 | __entry->int_ctl = int_ctl; | ||
411 | __entry->event_inj = event_inj; | ||
412 | __entry->npt = npt; | ||
413 | ), | ||
414 | |||
415 | TP_printk("rip: 0x%016llx vmcb: 0x%016llx nrip: 0x%016llx int_ctl: 0x%08x " | ||
416 | "event_inj: 0x%08x npt: %s\n", | ||
417 | __entry->rip, __entry->vmcb, __entry->nested_rip, | ||
418 | __entry->int_ctl, __entry->event_inj, | ||
419 | __entry->npt ? "on" : "off") | ||
420 | ); | ||
421 | |||
422 | /* | ||
423 | * Tracepoint for #VMEXIT while nested | ||
424 | */ | ||
425 | TRACE_EVENT(kvm_nested_vmexit, | ||
426 | TP_PROTO(__u64 rip, __u32 exit_code, | ||
427 | __u64 exit_info1, __u64 exit_info2, | ||
428 | __u32 exit_int_info, __u32 exit_int_info_err), | ||
429 | TP_ARGS(rip, exit_code, exit_info1, exit_info2, | ||
430 | exit_int_info, exit_int_info_err), | ||
431 | |||
432 | TP_STRUCT__entry( | ||
433 | __field( __u64, rip ) | ||
434 | __field( __u32, exit_code ) | ||
435 | __field( __u64, exit_info1 ) | ||
436 | __field( __u64, exit_info2 ) | ||
437 | __field( __u32, exit_int_info ) | ||
438 | __field( __u32, exit_int_info_err ) | ||
439 | ), | ||
440 | |||
441 | TP_fast_assign( | ||
442 | __entry->rip = rip; | ||
443 | __entry->exit_code = exit_code; | ||
444 | __entry->exit_info1 = exit_info1; | ||
445 | __entry->exit_info2 = exit_info2; | ||
446 | __entry->exit_int_info = exit_int_info; | ||
447 | __entry->exit_int_info_err = exit_int_info_err; | ||
448 | ), | ||
449 | TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx " | ||
450 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x\n", | ||
451 | __entry->rip, | ||
452 | ftrace_print_symbols_seq(p, __entry->exit_code, | ||
453 | kvm_x86_ops->exit_reasons_str), | ||
454 | __entry->exit_info1, __entry->exit_info2, | ||
455 | __entry->exit_int_info, __entry->exit_int_info_err) | ||
456 | ); | ||
457 | |||
458 | /* | ||
459 | * Tracepoint for #VMEXIT reinjected to the guest | ||
460 | */ | ||
461 | TRACE_EVENT(kvm_nested_vmexit_inject, | ||
462 | TP_PROTO(__u32 exit_code, | ||
463 | __u64 exit_info1, __u64 exit_info2, | ||
464 | __u32 exit_int_info, __u32 exit_int_info_err), | ||
465 | TP_ARGS(exit_code, exit_info1, exit_info2, | ||
466 | exit_int_info, exit_int_info_err), | ||
467 | |||
468 | TP_STRUCT__entry( | ||
469 | __field( __u32, exit_code ) | ||
470 | __field( __u64, exit_info1 ) | ||
471 | __field( __u64, exit_info2 ) | ||
472 | __field( __u32, exit_int_info ) | ||
473 | __field( __u32, exit_int_info_err ) | ||
474 | ), | ||
475 | |||
476 | TP_fast_assign( | ||
477 | __entry->exit_code = exit_code; | ||
478 | __entry->exit_info1 = exit_info1; | ||
479 | __entry->exit_info2 = exit_info2; | ||
480 | __entry->exit_int_info = exit_int_info; | ||
481 | __entry->exit_int_info_err = exit_int_info_err; | ||
482 | ), | ||
483 | |||
484 | TP_printk("reason: %s ext_inf1: 0x%016llx " | ||
485 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x\n", | ||
486 | ftrace_print_symbols_seq(p, __entry->exit_code, | ||
487 | kvm_x86_ops->exit_reasons_str), | ||
488 | __entry->exit_info1, __entry->exit_info2, | ||
489 | __entry->exit_int_info, __entry->exit_int_info_err) | ||
490 | ); | ||
491 | |||
492 | /* | ||
493 | * Tracepoint for nested #vmexit because of interrupt pending | ||
494 | */ | ||
495 | TRACE_EVENT(kvm_nested_intr_vmexit, | ||
496 | TP_PROTO(__u64 rip), | ||
497 | TP_ARGS(rip), | ||
498 | |||
499 | TP_STRUCT__entry( | ||
500 | __field( __u64, rip ) | ||
501 | ), | ||
502 | |||
503 | TP_fast_assign( | ||
504 | __entry->rip = rip | ||
505 | ), | ||
506 | |||
507 | TP_printk("rip: 0x%016llx\n", __entry->rip) | ||
508 | ); | ||
509 | |||
510 | /* | ||
511 | * Tracepoint for nested #vmexit because of interrupt pending | ||
512 | */ | ||
513 | TRACE_EVENT(kvm_invlpga, | ||
514 | TP_PROTO(__u64 rip, int asid, u64 address), | ||
515 | TP_ARGS(rip, asid, address), | ||
516 | |||
517 | TP_STRUCT__entry( | ||
518 | __field( __u64, rip ) | ||
519 | __field( int, asid ) | ||
520 | __field( __u64, address ) | ||
521 | ), | ||
522 | |||
523 | TP_fast_assign( | ||
524 | __entry->rip = rip; | ||
525 | __entry->asid = asid; | ||
526 | __entry->address = address; | ||
527 | ), | ||
528 | |||
529 | TP_printk("rip: 0x%016llx asid: %d address: 0x%016llx\n", | ||
530 | __entry->rip, __entry->asid, __entry->address) | ||
531 | ); | ||
532 | |||
533 | /* | ||
534 | * Tracepoint for nested #vmexit because of interrupt pending | ||
535 | */ | ||
536 | TRACE_EVENT(kvm_skinit, | ||
537 | TP_PROTO(__u64 rip, __u32 slb), | ||
538 | TP_ARGS(rip, slb), | ||
539 | |||
540 | TP_STRUCT__entry( | ||
541 | __field( __u64, rip ) | ||
542 | __field( __u32, slb ) | ||
543 | ), | ||
544 | |||
545 | TP_fast_assign( | ||
546 | __entry->rip = rip; | ||
547 | __entry->slb = slb; | ||
548 | ), | ||
549 | |||
550 | TP_printk("rip: 0x%016llx slb: 0x%08x\n", | ||
551 | __entry->rip, __entry->slb) | ||
552 | ); | ||
553 | |||
352 | #endif /* _TRACE_KVM_H */ | 554 | #endif /* _TRACE_KVM_H */ |
353 | 555 | ||
354 | /* This part must be outside protection */ | 556 | /* This part must be outside protection */ |