aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/trace.h
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /arch/x86/kvm/trace.h
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (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.h224
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 */
61TRACE_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 */
61TRACE_EVENT(kvm_pio, 93TRACE_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 */
216TRACE_EVENT(kvm_msr, 248TRACE_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 */
392TRACE_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 */
425TRACE_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 */
461TRACE_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 */
495TRACE_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 */
513TRACE_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 */
536TRACE_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 */