aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/trace.h
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /arch/x86/kvm/trace.h
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'arch/x86/kvm/trace.h')
-rw-r--r--arch/x86/kvm/trace.h138
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
432TRACE_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
449TRACE_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,
524TRACE_EVENT(kvm_nested_vmexit, 486TRACE_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,
563TRACE_EVENT(kvm_nested_vmexit_inject, 522TRACE_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
766TRACE_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
788TRACE_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