diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /arch/x86/kvm/trace.h | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'arch/x86/kvm/trace.h')
-rw-r--r-- | arch/x86/kvm/trace.h | 138 |
1 files changed, 21 insertions, 117 deletions
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index fe5e00ed703..3ff898c104f 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h | |||
@@ -2,9 +2,6 @@ | |||
2 | #define _TRACE_KVM_H | 2 | #define _TRACE_KVM_H |
3 | 3 | ||
4 | #include <linux/tracepoint.h> | 4 | #include <linux/tracepoint.h> |
5 | #include <asm/vmx.h> | ||
6 | #include <asm/svm.h> | ||
7 | #include <asm/clocksource.h> | ||
8 | 5 | ||
9 | #undef TRACE_SYSTEM | 6 | #undef TRACE_SYSTEM |
10 | #define TRACE_SYSTEM kvm | 7 | #define TRACE_SYSTEM kvm |
@@ -208,9 +205,8 @@ TRACE_EVENT(kvm_exit, | |||
208 | ), | 205 | ), |
209 | 206 | ||
210 | TP_printk("reason %s rip 0x%lx info %llx %llx", | 207 | TP_printk("reason %s rip 0x%lx info %llx %llx", |
211 | (__entry->isa == KVM_ISA_VMX) ? | 208 | ftrace_print_symbols_seq(p, __entry->exit_reason, |
212 | __print_symbolic(__entry->exit_reason, VMX_EXIT_REASONS) : | 209 | kvm_x86_ops->exit_reasons_str), |
213 | __print_symbolic(__entry->exit_reason, SVM_EXIT_REASONS), | ||
214 | __entry->guest_rip, __entry->info1, __entry->info2) | 210 | __entry->guest_rip, __entry->info1, __entry->info2) |
215 | ); | 211 | ); |
216 | 212 | ||
@@ -429,40 +425,6 @@ TRACE_EVENT(kvm_apic_accept_irq, | |||
429 | __entry->coalesced ? " (coalesced)" : "") | 425 | __entry->coalesced ? " (coalesced)" : "") |
430 | ); | 426 | ); |
431 | 427 | ||
432 | TRACE_EVENT(kvm_eoi, | ||
433 | TP_PROTO(struct kvm_lapic *apic, int vector), | ||
434 | TP_ARGS(apic, vector), | ||
435 | |||
436 | TP_STRUCT__entry( | ||
437 | __field( __u32, apicid ) | ||
438 | __field( int, vector ) | ||
439 | ), | ||
440 | |||
441 | TP_fast_assign( | ||
442 | __entry->apicid = apic->vcpu->vcpu_id; | ||
443 | __entry->vector = vector; | ||
444 | ), | ||
445 | |||
446 | TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) | ||
447 | ); | ||
448 | |||
449 | TRACE_EVENT(kvm_pv_eoi, | ||
450 | TP_PROTO(struct kvm_lapic *apic, int vector), | ||
451 | TP_ARGS(apic, vector), | ||
452 | |||
453 | TP_STRUCT__entry( | ||
454 | __field( __u32, apicid ) | ||
455 | __field( int, vector ) | ||
456 | ), | ||
457 | |||
458 | TP_fast_assign( | ||
459 | __entry->apicid = apic->vcpu->vcpu_id; | ||
460 | __entry->vector = vector; | ||
461 | ), | ||
462 | |||
463 | TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) | ||
464 | ); | ||
465 | |||
466 | /* | 428 | /* |
467 | * Tracepoint for nested VMRUN | 429 | * Tracepoint for nested VMRUN |
468 | */ | 430 | */ |
@@ -524,9 +486,9 @@ TRACE_EVENT(kvm_nested_intercepts, | |||
524 | TRACE_EVENT(kvm_nested_vmexit, | 486 | TRACE_EVENT(kvm_nested_vmexit, |
525 | TP_PROTO(__u64 rip, __u32 exit_code, | 487 | TP_PROTO(__u64 rip, __u32 exit_code, |
526 | __u64 exit_info1, __u64 exit_info2, | 488 | __u64 exit_info1, __u64 exit_info2, |
527 | __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), | 489 | __u32 exit_int_info, __u32 exit_int_info_err), |
528 | TP_ARGS(rip, exit_code, exit_info1, exit_info2, | 490 | TP_ARGS(rip, exit_code, exit_info1, exit_info2, |
529 | exit_int_info, exit_int_info_err, isa), | 491 | exit_int_info, exit_int_info_err), |
530 | 492 | ||
531 | TP_STRUCT__entry( | 493 | TP_STRUCT__entry( |
532 | __field( __u64, rip ) | 494 | __field( __u64, rip ) |
@@ -535,7 +497,6 @@ TRACE_EVENT(kvm_nested_vmexit, | |||
535 | __field( __u64, exit_info2 ) | 497 | __field( __u64, exit_info2 ) |
536 | __field( __u32, exit_int_info ) | 498 | __field( __u32, exit_int_info ) |
537 | __field( __u32, exit_int_info_err ) | 499 | __field( __u32, exit_int_info_err ) |
538 | __field( __u32, isa ) | ||
539 | ), | 500 | ), |
540 | 501 | ||
541 | TP_fast_assign( | 502 | TP_fast_assign( |
@@ -545,14 +506,12 @@ TRACE_EVENT(kvm_nested_vmexit, | |||
545 | __entry->exit_info2 = exit_info2; | 506 | __entry->exit_info2 = exit_info2; |
546 | __entry->exit_int_info = exit_int_info; | 507 | __entry->exit_int_info = exit_int_info; |
547 | __entry->exit_int_info_err = exit_int_info_err; | 508 | __entry->exit_int_info_err = exit_int_info_err; |
548 | __entry->isa = isa; | ||
549 | ), | 509 | ), |
550 | TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx " | 510 | TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx " |
551 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", | 511 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", |
552 | __entry->rip, | 512 | __entry->rip, |
553 | (__entry->isa == KVM_ISA_VMX) ? | 513 | ftrace_print_symbols_seq(p, __entry->exit_code, |
554 | __print_symbolic(__entry->exit_code, VMX_EXIT_REASONS) : | 514 | kvm_x86_ops->exit_reasons_str), |
555 | __print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), | ||
556 | __entry->exit_info1, __entry->exit_info2, | 515 | __entry->exit_info1, __entry->exit_info2, |
557 | __entry->exit_int_info, __entry->exit_int_info_err) | 516 | __entry->exit_int_info, __entry->exit_int_info_err) |
558 | ); | 517 | ); |
@@ -563,9 +522,9 @@ TRACE_EVENT(kvm_nested_vmexit, | |||
563 | TRACE_EVENT(kvm_nested_vmexit_inject, | 522 | TRACE_EVENT(kvm_nested_vmexit_inject, |
564 | TP_PROTO(__u32 exit_code, | 523 | TP_PROTO(__u32 exit_code, |
565 | __u64 exit_info1, __u64 exit_info2, | 524 | __u64 exit_info1, __u64 exit_info2, |
566 | __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), | 525 | __u32 exit_int_info, __u32 exit_int_info_err), |
567 | TP_ARGS(exit_code, exit_info1, exit_info2, | 526 | TP_ARGS(exit_code, exit_info1, exit_info2, |
568 | exit_int_info, exit_int_info_err, isa), | 527 | exit_int_info, exit_int_info_err), |
569 | 528 | ||
570 | TP_STRUCT__entry( | 529 | TP_STRUCT__entry( |
571 | __field( __u32, exit_code ) | 530 | __field( __u32, exit_code ) |
@@ -573,7 +532,6 @@ TRACE_EVENT(kvm_nested_vmexit_inject, | |||
573 | __field( __u64, exit_info2 ) | 532 | __field( __u64, exit_info2 ) |
574 | __field( __u32, exit_int_info ) | 533 | __field( __u32, exit_int_info ) |
575 | __field( __u32, exit_int_info_err ) | 534 | __field( __u32, exit_int_info_err ) |
576 | __field( __u32, isa ) | ||
577 | ), | 535 | ), |
578 | 536 | ||
579 | TP_fast_assign( | 537 | TP_fast_assign( |
@@ -582,14 +540,12 @@ TRACE_EVENT(kvm_nested_vmexit_inject, | |||
582 | __entry->exit_info2 = exit_info2; | 540 | __entry->exit_info2 = exit_info2; |
583 | __entry->exit_int_info = exit_int_info; | 541 | __entry->exit_int_info = exit_int_info; |
584 | __entry->exit_int_info_err = exit_int_info_err; | 542 | __entry->exit_int_info_err = exit_int_info_err; |
585 | __entry->isa = isa; | ||
586 | ), | 543 | ), |
587 | 544 | ||
588 | TP_printk("reason: %s ext_inf1: 0x%016llx " | 545 | TP_printk("reason: %s ext_inf1: 0x%016llx " |
589 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", | 546 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", |
590 | (__entry->isa == KVM_ISA_VMX) ? | 547 | ftrace_print_symbols_seq(p, __entry->exit_code, |
591 | __print_symbolic(__entry->exit_code, VMX_EXIT_REASONS) : | 548 | kvm_x86_ops->exit_reasons_str), |
592 | __print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), | ||
593 | __entry->exit_info1, __entry->exit_info2, | 549 | __entry->exit_info1, __entry->exit_info2, |
594 | __entry->exit_int_info, __entry->exit_int_info_err) | 550 | __entry->exit_int_info, __entry->exit_int_info_err) |
595 | ); | 551 | ); |
@@ -656,6 +612,16 @@ TRACE_EVENT(kvm_skinit, | |||
656 | __entry->rip, __entry->slb) | 612 | __entry->rip, __entry->slb) |
657 | ); | 613 | ); |
658 | 614 | ||
615 | #define __print_insn(insn, ilen) ({ \ | ||
616 | int i; \ | ||
617 | const char *ret = p->buffer + p->len; \ | ||
618 | \ | ||
619 | for (i = 0; i < ilen; ++i) \ | ||
620 | trace_seq_printf(p, " %02x", insn[i]); \ | ||
621 | trace_seq_printf(p, "%c", 0); \ | ||
622 | ret; \ | ||
623 | }) | ||
624 | |||
659 | #define KVM_EMUL_INSN_F_CR0_PE (1 << 0) | 625 | #define KVM_EMUL_INSN_F_CR0_PE (1 << 0) |
660 | #define KVM_EMUL_INSN_F_EFL_VM (1 << 1) | 626 | #define KVM_EMUL_INSN_F_EFL_VM (1 << 1) |
661 | #define KVM_EMUL_INSN_F_CS_D (1 << 2) | 627 | #define KVM_EMUL_INSN_F_CS_D (1 << 2) |
@@ -722,7 +688,7 @@ TRACE_EVENT(kvm_emulate_insn, | |||
722 | 688 | ||
723 | TP_printk("%x:%llx:%s (%s)%s", | 689 | TP_printk("%x:%llx:%s (%s)%s", |
724 | __entry->csbase, __entry->rip, | 690 | __entry->csbase, __entry->rip, |
725 | __print_hex(__entry->insn, __entry->len), | 691 | __print_insn(__entry->insn, __entry->len), |
726 | __print_symbolic(__entry->flags, | 692 | __print_symbolic(__entry->flags, |
727 | kvm_trace_symbol_emul_flags), | 693 | kvm_trace_symbol_emul_flags), |
728 | __entry->failed ? " failed" : "" | 694 | __entry->failed ? " failed" : "" |
@@ -755,68 +721,6 @@ TRACE_EVENT( | |||
755 | __entry->write ? "Write" : "Read", | 721 | __entry->write ? "Write" : "Read", |
756 | __entry->gpa_match ? "GPA" : "GVA") | 722 | __entry->gpa_match ? "GPA" : "GVA") |
757 | ); | 723 | ); |
758 | |||
759 | #ifdef CONFIG_X86_64 | ||
760 | |||
761 | #define host_clocks \ | ||
762 | {VCLOCK_NONE, "none"}, \ | ||
763 | {VCLOCK_TSC, "tsc"}, \ | ||
764 | {VCLOCK_HPET, "hpet"} \ | ||
765 | |||
766 | TRACE_EVENT(kvm_update_master_clock, | ||
767 | TP_PROTO(bool use_master_clock, unsigned int host_clock, bool offset_matched), | ||
768 | TP_ARGS(use_master_clock, host_clock, offset_matched), | ||
769 | |||
770 | TP_STRUCT__entry( | ||
771 | __field( bool, use_master_clock ) | ||
772 | __field( unsigned int, host_clock ) | ||
773 | __field( bool, offset_matched ) | ||
774 | ), | ||
775 | |||
776 | TP_fast_assign( | ||
777 | __entry->use_master_clock = use_master_clock; | ||
778 | __entry->host_clock = host_clock; | ||
779 | __entry->offset_matched = offset_matched; | ||
780 | ), | ||
781 | |||
782 | TP_printk("masterclock %d hostclock %s offsetmatched %u", | ||
783 | __entry->use_master_clock, | ||
784 | __print_symbolic(__entry->host_clock, host_clocks), | ||
785 | __entry->offset_matched) | ||
786 | ); | ||
787 | |||
788 | TRACE_EVENT(kvm_track_tsc, | ||
789 | TP_PROTO(unsigned int vcpu_id, unsigned int nr_matched, | ||
790 | unsigned int online_vcpus, bool use_master_clock, | ||
791 | unsigned int host_clock), | ||
792 | TP_ARGS(vcpu_id, nr_matched, online_vcpus, use_master_clock, | ||
793 | host_clock), | ||
794 | |||
795 | TP_STRUCT__entry( | ||
796 | __field( unsigned int, vcpu_id ) | ||
797 | __field( unsigned int, nr_vcpus_matched_tsc ) | ||
798 | __field( unsigned int, online_vcpus ) | ||
799 | __field( bool, use_master_clock ) | ||
800 | __field( unsigned int, host_clock ) | ||
801 | ), | ||
802 | |||
803 | TP_fast_assign( | ||
804 | __entry->vcpu_id = vcpu_id; | ||
805 | __entry->nr_vcpus_matched_tsc = nr_matched; | ||
806 | __entry->online_vcpus = online_vcpus; | ||
807 | __entry->use_master_clock = use_master_clock; | ||
808 | __entry->host_clock = host_clock; | ||
809 | ), | ||
810 | |||
811 | TP_printk("vcpu_id %u masterclock %u offsetmatched %u nr_online %u" | ||
812 | " hostclock %s", | ||
813 | __entry->vcpu_id, __entry->use_master_clock, | ||
814 | __entry->nr_vcpus_matched_tsc, __entry->online_vcpus, | ||
815 | __print_symbolic(__entry->host_clock, host_clocks)) | ||
816 | ); | ||
817 | |||
818 | #endif /* CONFIG_X86_64 */ | ||
819 | |||
820 | #endif /* _TRACE_KVM_H */ | 724 | #endif /* _TRACE_KVM_H */ |
821 | 725 | ||
822 | #undef TRACE_INCLUDE_PATH | 726 | #undef TRACE_INCLUDE_PATH |