Linux Kernel
3.7.1
|
#include <linux/tracepoint.h>
#include <asm/vmx.h>
#include <asm/svm.h>
#include <trace/define_trace.h>
Go to the source code of this file.
Macros | |
#define | _TRACE_KVM_H |
#define | TRACE_SYSTEM kvm |
#define | AREG(x) { APIC_##x, "APIC_" #x } |
#define | kvm_trace_symbol_apic |
#define | trace_kvm_apic_read(reg, val) trace_kvm_apic(0, reg, val) |
#define | trace_kvm_apic_write(reg, val) trace_kvm_apic(1, reg, val) |
#define | KVM_ISA_VMX 1 |
#define | KVM_ISA_SVM 2 |
#define | EXS(x) { x##_VECTOR, "#" #x } |
#define | kvm_trace_sym_exc |
#define | trace_kvm_msr_read(ecx, data) trace_kvm_msr(0, ecx, data, false) |
#define | trace_kvm_msr_write(ecx, data) trace_kvm_msr(1, ecx, data, false) |
#define | trace_kvm_msr_read_ex(ecx) trace_kvm_msr(0, ecx, 0, true) |
#define | trace_kvm_msr_write_ex(ecx, data) trace_kvm_msr(1, ecx, data, true) |
#define | trace_kvm_cr_read(cr, val) trace_kvm_cr(0, cr, val) |
#define | trace_kvm_cr_write(cr, val) trace_kvm_cr(1, cr, val) |
#define | kvm_apic_dst_shorthand |
#define | KVM_EMUL_INSN_F_CR0_PE (1 << 0) |
#define | KVM_EMUL_INSN_F_EFL_VM (1 << 1) |
#define | KVM_EMUL_INSN_F_CS_D (1 << 2) |
#define | KVM_EMUL_INSN_F_CS_L (1 << 3) |
#define | kvm_trace_symbol_emul_flags |
#define | kei_decode_mode(mode) |
#define | trace_kvm_emulate_insn_start(vcpu) trace_kvm_emulate_insn(vcpu, 0) |
#define | trace_kvm_emulate_insn_failed(vcpu) trace_kvm_emulate_insn(vcpu, 1) |
#define | TRACE_INCLUDE_PATH arch/x86/kvm |
#define | TRACE_INCLUDE_FILE trace |
Functions | |
TRACE_EVENT (kvm_entry, TP_PROTO(unsigned int vcpu_id), TP_ARGS(vcpu_id), TP_STRUCT__entry(__field(unsigned int, vcpu_id)), TP_fast_assign(__entry->vcpu_id=vcpu_id;), TP_printk("vcpu %u", __entry->vcpu_id)) | |
TRACE_EVENT (kvm_hypercall, TP_PROTO(unsigned long nr, unsigned long a0, unsigned long a1, unsigned long a2, unsigned long a3), TP_ARGS(nr, a0, a1, a2, a3), TP_STRUCT__entry(__field(unsigned long, nr) __field(unsigned long, a0) __field(unsigned long, a1) __field(unsigned long, a2) __field(unsigned long, a3)), TP_fast_assign(__entry->nr=nr;__entry->a0=a0;__entry->a1=a1;__entry->a2=a2;__entry->a3=a3;), TP_printk("nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx", __entry->nr, __entry->a0, __entry->a1, __entry->a2, __entry->a3)) | |
TRACE_EVENT (kvm_hv_hypercall, TP_PROTO(__u16 code, bool fast, __u16 rep_cnt, __u16 rep_idx, __u64 ingpa, __u64 outgpa), TP_ARGS(code, fast, rep_cnt, rep_idx, ingpa, outgpa), TP_STRUCT__entry(__field(__u16, rep_cnt) __field(__u16, rep_idx) __field(__u64, ingpa) __field(__u64, outgpa) __field(__u16, code) __field(bool, fast)), TP_fast_assign(__entry->rep_cnt=rep_cnt;__entry->rep_idx=rep_idx;__entry->ingpa=ingpa;__entry->outgpa=outgpa;__entry->code=code;__entry->fast=fast;), TP_printk("code 0x%x %s cnt 0x%x idx 0x%x in 0x%llx out 0x%llx", __entry->code, __entry->fast?"fast":"slow", __entry->rep_cnt, __entry->rep_idx, __entry->ingpa, __entry->outgpa)) | |
TRACE_EVENT (kvm_pio, TP_PROTO(unsigned int rw, unsigned int port, unsigned int size, unsigned int count), TP_ARGS(rw, port, size, count), TP_STRUCT__entry(__field(unsigned int, rw) __field(unsigned int, port) __field(unsigned int, size) __field(unsigned int, count)), TP_fast_assign(__entry->rw=rw;__entry->port=port;__entry->size=size;__entry->count=count;), TP_printk("pio_%s at 0x%x size %d count %d", __entry->rw?"write":"read", __entry->port, __entry->size, __entry->count)) | |
TRACE_EVENT (kvm_cpuid, TP_PROTO(unsigned int function, unsigned long rax, unsigned long rbx, unsigned long rcx, unsigned long rdx), TP_ARGS(function, rax, rbx, rcx, rdx), TP_STRUCT__entry(__field(unsigned int, function) __field(unsigned long, rax) __field(unsigned long, rbx) __field(unsigned long, rcx) __field(unsigned long, rdx)), TP_fast_assign(__entry->function=function;__entry->rax=rax;__entry->rbx=rbx;__entry->rcx=rcx;__entry->rdx=rdx;), TP_printk("func %x rax %lx rbx %lx rcx %lx rdx %lx", __entry->function, __entry->rax, __entry->rbx, __entry->rcx, __entry->rdx)) | |
TRACE_EVENT (kvm_apic, TP_PROTO(unsigned int rw, unsigned int reg, unsigned int val), TP_ARGS(rw, reg, val), TP_STRUCT__entry(__field(unsigned int, rw) __field(unsigned int, reg) __field(unsigned int, val)), TP_fast_assign(__entry->rw=rw;__entry->reg=reg;__entry->val=val;), TP_printk("apic_%s %s = 0x%x", __entry->rw?"write":"read", __print_symbolic(__entry->reg, kvm_trace_symbol_apic), __entry->val)) | |
TRACE_EVENT (kvm_exit, TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu, u32 isa), TP_ARGS(exit_reason, vcpu, isa), TP_STRUCT__entry(__field(unsigned int, exit_reason) __field(unsigned long, guest_rip) __field(u32, isa) __field(u64, info1) __field(u64, info2)), TP_fast_assign(__entry->exit_reason=exit_reason;__entry->guest_rip=kvm_rip_read(vcpu);__entry->isa=isa;kvm_x86_ops->get_exit_info(vcpu,&__entry->info1,&__entry->info2);), TP_printk("reason %s rip 0x%lx info %llx %llx",(__entry->isa==KVM_ISA_VMX)?__print_symbolic(__entry->exit_reason, VMX_EXIT_REASONS):__print_symbolic(__entry->exit_reason, SVM_EXIT_REASONS), __entry->guest_rip, __entry->info1, __entry->info2)) | |
TRACE_EVENT (kvm_inj_virq, TP_PROTO(unsigned int irq), TP_ARGS(irq), TP_STRUCT__entry(__field(unsigned int, irq)), TP_fast_assign(__entry->irq=irq;), TP_printk("irq %u", __entry->irq)) | |
TRACE_EVENT (kvm_inj_exception, TP_PROTO(unsigned exception, bool has_error, unsigned error_code), TP_ARGS(exception, has_error, error_code), TP_STRUCT__entry(__field(u8, exception) __field(u8, has_error) __field(u32, error_code)), TP_fast_assign(__entry->exception=exception;__entry->has_error=has_error;__entry->error_code=error_code;), TP_printk("%s (0x%x)", __print_symbolic(__entry->exception, kvm_trace_sym_exc), __entry->has_error?__entry->error_code:0)) | |
TRACE_EVENT (kvm_page_fault, TP_PROTO(unsigned long fault_address, unsigned int error_code), TP_ARGS(fault_address, error_code), TP_STRUCT__entry(__field(unsigned long, fault_address) __field(unsigned int, error_code)), TP_fast_assign(__entry->fault_address=fault_address;__entry->error_code=error_code;), TP_printk("address %lx error_code %x", __entry->fault_address, __entry->error_code)) | |
TRACE_EVENT (kvm_msr, TP_PROTO(unsigned write, u32 ecx, u64 data, bool exception), TP_ARGS(write, ecx, data, exception), TP_STRUCT__entry(__field(unsigned, write) __field(u32, ecx) __field(u64, data) __field(u8, exception)), TP_fast_assign(__entry->write=write;__entry->ecx=ecx;__entry->data=data;__entry->exception=exception;), TP_printk("msr_%s %x = 0x%llx%s", __entry->write?"write":"read", __entry->ecx, __entry->data, __entry->exception?" (#GP)":"")) | |
TRACE_EVENT (kvm_cr, TP_PROTO(unsigned int rw, unsigned int cr, unsigned long val), TP_ARGS(rw, cr, val), TP_STRUCT__entry(__field(unsigned int, rw) __field(unsigned int, cr) __field(unsigned long, val)), TP_fast_assign(__entry->rw=rw;__entry->cr=cr;__entry->val=val;), TP_printk("cr_%s %x = 0x%lx", __entry->rw?"write":"read", __entry->cr, __entry->val)) | |
TRACE_EVENT (kvm_pic_set_irq, TP_PROTO(__u8 chip, __u8 pin, __u8 elcr, __u8 imr, bool coalesced), TP_ARGS(chip, pin, elcr, imr, coalesced), TP_STRUCT__entry(__field(__u8, chip) __field(__u8, pin) __field(__u8, elcr) __field(__u8, imr) __field(bool, coalesced)), TP_fast_assign(__entry->chip=chip;__entry->pin=pin;__entry->elcr=elcr;__entry->imr=imr;__entry->coalesced=coalesced;), TP_printk("chip %u pin %u (%s%s)%s", __entry->chip, __entry->pin,(__entry->elcr &(1<< __entry->pin))?"level":"edge",(__entry->imr &(1<< __entry->pin))?"|masked":"", __entry->coalesced?" (coalesced)":"")) | |
TRACE_EVENT (kvm_apic_ipi, TP_PROTO(__u32 icr_low, __u32 dest_id), TP_ARGS(icr_low, dest_id), TP_STRUCT__entry(__field(__u32, icr_low) __field(__u32, dest_id)), TP_fast_assign(__entry->icr_low=icr_low;__entry->dest_id=dest_id;), TP_printk("dst %x vec %u (%s|%s|%s|%s|%s)", __entry->dest_id,(u8) __entry->icr_low, __print_symbolic((__entry->icr_low >> 8 &0x7), kvm_deliver_mode),(__entry->icr_low &(1<< 11))?"logical":"physical",(__entry->icr_low &(1<< 14))?"assert":"de-assert",(__entry->icr_low &(1<< 15))?"level":"edge", __print_symbolic((__entry->icr_low >> 18 &0x3), kvm_apic_dst_shorthand))) | |
TRACE_EVENT (kvm_apic_accept_irq, TP_PROTO(__u32 apicid, __u16 dm, __u8 tm, __u8 vec, bool coalesced), TP_ARGS(apicid, dm, tm, vec, coalesced), TP_STRUCT__entry(__field(__u32, apicid) __field(__u16, dm) __field(__u8, tm) __field(__u8, vec) __field(bool, coalesced)), TP_fast_assign(__entry->apicid=apicid;__entry->dm=dm;__entry->tm=tm;__entry->vec=vec;__entry->coalesced=coalesced;), TP_printk("apicid %x vec %u (%s|%s)%s", __entry->apicid, __entry->vec, __print_symbolic((__entry->dm >> 8 &0x7), kvm_deliver_mode), __entry->tm?"level":"edge", __entry->coalesced?" (coalesced)":"")) | |
TRACE_EVENT (kvm_eoi, TP_PROTO(struct kvm_lapic *apic, int vector), TP_ARGS(apic, vector), TP_STRUCT__entry(__field(__u32, apicid) __field(int, vector)), TP_fast_assign(__entry->apicid=apic->vcpu->vcpu_id;__entry->vector=vector;), TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector)) | |
TRACE_EVENT (kvm_pv_eoi, TP_PROTO(struct kvm_lapic *apic, int vector), TP_ARGS(apic, vector), TP_STRUCT__entry(__field(__u32, apicid) __field(int, vector)), TP_fast_assign(__entry->apicid=apic->vcpu->vcpu_id;__entry->vector=vector;), TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector)) | |
TRACE_EVENT (kvm_nested_vmrun, TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl, __u32 event_inj, bool npt), TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, npt), TP_STRUCT__entry(__field(__u64, rip) __field(__u64, vmcb) __field(__u64, nested_rip) __field(__u32, int_ctl) __field(__u32, event_inj) __field(bool, npt)), TP_fast_assign(__entry->rip=rip;__entry->vmcb=vmcb;__entry->nested_rip=nested_rip;__entry->int_ctl=int_ctl;__entry->event_inj=event_inj;__entry->npt=npt;), TP_printk("rip: 0x%016llx vmcb: 0x%016llx nrip: 0x%016llx int_ctl: 0x%08x ""event_inj: 0x%08x npt: %s", __entry->rip, __entry->vmcb, __entry->nested_rip, __entry->int_ctl, __entry->event_inj, __entry->npt?"on":"off")) | |
TRACE_EVENT (kvm_nested_intercepts, TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions, __u64 intercept), TP_ARGS(cr_read, cr_write, exceptions, intercept), TP_STRUCT__entry(__field(__u16, cr_read) __field(__u16, cr_write) __field(__u32, exceptions) __field(__u64, intercept)), TP_fast_assign(__entry->cr_read=cr_read;__entry->cr_write=cr_write;__entry->exceptions=exceptions;__entry->intercept=intercept;), TP_printk("cr_read: %04x cr_write: %04x excp: %08x intercept: %016llx", __entry->cr_read, __entry->cr_write, __entry->exceptions, __entry->intercept)) | |
TRACE_EVENT (kvm_nested_vmexit, TP_PROTO(__u64 rip, __u32 exit_code, __u64 exit_info1, __u64 exit_info2, __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), TP_ARGS(rip, exit_code, exit_info1, exit_info2, exit_int_info, exit_int_info_err, isa), TP_STRUCT__entry(__field(__u64, rip) __field(__u32, exit_code) __field(__u64, exit_info1) __field(__u64, exit_info2) __field(__u32, exit_int_info) __field(__u32, exit_int_info_err) __field(__u32, isa)), TP_fast_assign(__entry->rip=rip;__entry->exit_code=exit_code;__entry->exit_info1=exit_info1;__entry->exit_info2=exit_info2;__entry->exit_int_info=exit_int_info;__entry->exit_int_info_err=exit_int_info_err;__entry->isa=isa;), TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx ""ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", __entry->rip,(__entry->isa==KVM_ISA_VMX)?__print_symbolic(__entry->exit_code, VMX_EXIT_REASONS):__print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), __entry->exit_info1, __entry->exit_info2, __entry->exit_int_info, __entry->exit_int_info_err)) | |
TRACE_EVENT (kvm_nested_vmexit_inject, TP_PROTO(__u32 exit_code, __u64 exit_info1, __u64 exit_info2, __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), TP_ARGS(exit_code, exit_info1, exit_info2, exit_int_info, exit_int_info_err, isa), TP_STRUCT__entry(__field(__u32, exit_code) __field(__u64, exit_info1) __field(__u64, exit_info2) __field(__u32, exit_int_info) __field(__u32, exit_int_info_err) __field(__u32, isa)), TP_fast_assign(__entry->exit_code=exit_code;__entry->exit_info1=exit_info1;__entry->exit_info2=exit_info2;__entry->exit_int_info=exit_int_info;__entry->exit_int_info_err=exit_int_info_err;__entry->isa=isa;), TP_printk("reason: %s ext_inf1: 0x%016llx ""ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x",(__entry->isa==KVM_ISA_VMX)?__print_symbolic(__entry->exit_code, VMX_EXIT_REASONS):__print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), __entry->exit_info1, __entry->exit_info2, __entry->exit_int_info, __entry->exit_int_info_err)) | |
TRACE_EVENT (kvm_nested_intr_vmexit, TP_PROTO(__u64 rip), TP_ARGS(rip), TP_STRUCT__entry(__field(__u64, rip)), TP_fast_assign(__entry->rip=rip), TP_printk("rip: 0x%016llx", __entry->rip)) | |
TRACE_EVENT (kvm_invlpga, TP_PROTO(__u64 rip, int asid, u64 address), TP_ARGS(rip, asid, address), TP_STRUCT__entry(__field(__u64, rip) __field(int, asid) __field(__u64, address)), TP_fast_assign(__entry->rip=rip;__entry->asid=asid;__entry->address=address;), TP_printk("rip: 0x%016llx asid: %d address: 0x%016llx", __entry->rip, __entry->asid, __entry->address)) | |
TRACE_EVENT (kvm_skinit, TP_PROTO(__u64 rip, __u32 slb), TP_ARGS(rip, slb), TP_STRUCT__entry(__field(__u64, rip) __field(__u32, slb)), TP_fast_assign(__entry->rip=rip;__entry->slb=slb;), TP_printk("rip: 0x%016llx slb: 0x%08x", __entry->rip, __entry->slb)) | |
TRACE_EVENT (kvm_emulate_insn, TP_PROTO(struct kvm_vcpu *vcpu, __u8 failed), TP_ARGS(vcpu, failed), TP_STRUCT__entry(__field(__u64, rip) __field(__u32, csbase) __field(__u8, len) __array(__u8, insn, 15) __field(__u8, flags) __field(__u8, failed)), TP_fast_assign(__entry->rip=vcpu->arch.emulate_ctxt.fetch.start;__entry->csbase=kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS);__entry->len=vcpu->arch.emulate_ctxt._eip-vcpu->arch.emulate_ctxt.fetch.start;memcpy(__entry->insn, vcpu->arch.emulate_ctxt.fetch.data, 15);__entry->flags=kei_decode_mode(vcpu->arch.emulate_ctxt.mode);__entry->failed=failed;), TP_printk("%x:%llx:%s (%s)%s", __entry->csbase, __entry->rip, __print_hex(__entry->insn, __entry->len), __print_symbolic(__entry->flags, kvm_trace_symbol_emul_flags), __entry->failed?" failed":"")) | |
TRACE_EVENT (vcpu_match_mmio, TP_PROTO(gva_t gva, gpa_t gpa, bool write, bool gpa_match), TP_ARGS(gva, gpa, write, gpa_match), TP_STRUCT__entry(__field(gva_t, gva) __field(gpa_t, gpa) __field(bool, write) __field(bool, gpa_match)), TP_fast_assign(__entry->gva=gva;__entry->gpa=gpa;__entry->write=write;__entry->gpa_match=gpa_match), TP_printk("gva %#lx gpa %#llx %s %s", __entry->gva, __entry->gpa, __entry->write?"Write":"Read", __entry->gpa_match?"GPA":"GVA")) | |
#define kei_decode_mode | ( | mode | ) |
#define kvm_apic_dst_shorthand |
#define kvm_trace_sym_exc |
#define kvm_trace_symbol_apic |
#define kvm_trace_symbol_emul_flags |
#define trace_kvm_emulate_insn_failed | ( | vcpu | ) | trace_kvm_emulate_insn(vcpu, 1) |
#define trace_kvm_emulate_insn_start | ( | vcpu | ) | trace_kvm_emulate_insn(vcpu, 0) |
TRACE_EVENT | ( | kvm_entry | , |
TP_PROTO(unsigned int vcpu_id) | , | ||
TP_ARGS(vcpu_id) | , | ||
TP_STRUCT__entry(__field(unsigned int, vcpu_id)) | , | ||
TP_fast_assign(__entry->vcpu_id=vcpu_id;) | , | ||
TP_printk("vcpu %u", __entry->vcpu_id) | |||
) |
TRACE_EVENT | ( | kvm_hypercall | , |
TP_PROTO(unsigned long nr, unsigned long a0, unsigned long a1, unsigned long a2, unsigned long a3) | , | ||
TP_ARGS(nr, a0, a1, a2, a3) | , | ||
TP_STRUCT__entry(__field(unsigned long, nr) __field(unsigned long, a0) __field(unsigned long, a1) __field(unsigned long, a2) __field(unsigned long, a3)) | , | ||
TP_fast_assign(__entry->nr=nr;__entry->a0=a0;__entry->a1=a1;__entry->a2=a2;__entry->a3=a3;) | , | ||
TP_printk("nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx", __entry->nr, __entry->a0, __entry->a1, __entry->a2, __entry->a3) | |||
) |
TRACE_EVENT | ( | kvm_hv_hypercall | , |
TP_PROTO(__u16 code, bool fast, __u16 rep_cnt, __u16 rep_idx, __u64 ingpa, __u64 outgpa) | , | ||
TP_ARGS(code, fast, rep_cnt, rep_idx, ingpa, outgpa) | , | ||
TP_STRUCT__entry(__field(__u16, rep_cnt) __field(__u16, rep_idx) __field(__u64, ingpa) __field(__u64, outgpa) __field(__u16, code) __field(bool, fast)) | , | ||
TP_fast_assign(__entry->rep_cnt=rep_cnt;__entry->rep_idx=rep_idx;__entry->ingpa=ingpa;__entry->outgpa=outgpa;__entry->code=code;__entry->fast=fast;) | , | ||
TP_printk("code 0x%x %s cnt 0x%x idx 0x%x in 0x%llx out 0x%llx", __entry->code, __entry->fast?"fast":"slow", __entry->rep_cnt, __entry->rep_idx, __entry->ingpa, __entry->outgpa) | |||
) |
TRACE_EVENT | ( | kvm_pio | , |
TP_PROTO(unsigned int rw, unsigned int port, unsigned int size, unsigned int count) | , | ||
TP_ARGS(rw, port, size, count) | , | ||
TP_STRUCT__entry(__field(unsigned int, rw) __field(unsigned int, port) __field(unsigned int, size) __field(unsigned int, count)) | , | ||
TP_fast_assign(__entry->rw=rw;__entry->port=port;__entry->size=size;__entry->count=count;) | , | ||
TP_printk("pio_%s at 0x%x size %d count %d", __entry->rw?"write":"read", __entry->port, __entry->size, __entry->count) | |||
) |
TRACE_EVENT | ( | kvm_cpuid | , |
TP_PROTO(unsigned int function, unsigned long rax, unsigned long rbx, unsigned long rcx, unsigned long rdx) | , | ||
TP_ARGS(function, rax, rbx, rcx, rdx) | , | ||
TP_STRUCT__entry(__field(unsigned int, function) __field(unsigned long, rax) __field(unsigned long, rbx) __field(unsigned long, rcx) __field(unsigned long, rdx)) | , | ||
TP_fast_assign(__entry->function=function;__entry->rax=rax;__entry->rbx=rbx;__entry->rcx=rcx;__entry->rdx=rdx;) | , | ||
TP_printk("func %x rax %lx rbx %lx rcx %lx rdx %lx", __entry->function, __entry->rax, __entry->rbx, __entry->rcx, __entry->rdx) | |||
) |
TRACE_EVENT | ( | kvm_apic | , |
TP_PROTO(unsigned int rw, unsigned int reg, unsigned int val) | , | ||
TP_ARGS(rw, reg, val) | , | ||
TP_STRUCT__entry(__field(unsigned int, rw) __field(unsigned int, reg) __field(unsigned int, val)) | , | ||
TP_fast_assign(__entry->rw=rw;__entry->reg=reg;__entry->val=val;) | , | ||
TP_printk("apic_%s %s = 0x%x", __entry->rw?"write":"read", __print_symbolic(__entry->reg, kvm_trace_symbol_apic), __entry->val) | |||
) |
TRACE_EVENT | ( | kvm_exit | , |
TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu, u32 isa) | , | ||
TP_ARGS(exit_reason, vcpu, isa) | , | ||
TP_STRUCT__entry(__field(unsigned int, exit_reason) __field(unsigned long, guest_rip) __field(u32, isa) __field(u64, info1) __field(u64, info2)) | , | ||
TP_fast_assign(__entry->exit_reason=exit_reason;__entry->guest_rip=kvm_rip_read(vcpu);__entry->isa=isa;kvm_x86_ops->get_exit_info(vcpu,&__entry->info1,&__entry->info2);) | , | ||
TP_printk("reason %s rip 0x%lx info %llx %llx",(__entry->isa==KVM_ISA_VMX)?__print_symbolic(__entry->exit_reason, VMX_EXIT_REASONS):__print_symbolic(__entry->exit_reason, SVM_EXIT_REASONS), __entry->guest_rip, __entry->info1, __entry->info2) | |||
) |
TRACE_EVENT | ( | kvm_inj_virq | , |
TP_PROTO(unsigned int irq) | , | ||
TP_ARGS(irq) | , | ||
TP_STRUCT__entry(__field(unsigned int, irq)) | , | ||
TP_fast_assign(__entry->irq=irq;) | , | ||
TP_printk("irq %u", __entry->irq) | |||
) |
TRACE_EVENT | ( | kvm_inj_exception | , |
TP_PROTO(unsigned exception, bool has_error, unsigned error_code) | , | ||
TP_ARGS(exception, has_error, error_code) | , | ||
TP_STRUCT__entry(__field(u8, exception) __field(u8, has_error) __field(u32, error_code)) | , | ||
TP_fast_assign(__entry->exception=exception;__entry->has_error=has_error;__entry->error_code=error_code;) | , | ||
TP_printk("%s (0x%x)", __print_symbolic(__entry->exception, kvm_trace_sym_exc), __entry->has_error?__entry->error_code:0) | |||
) |
TRACE_EVENT | ( | kvm_page_fault | , |
TP_PROTO(unsigned long fault_address, unsigned int error_code) | , | ||
TP_ARGS(fault_address, error_code) | , | ||
TP_STRUCT__entry(__field(unsigned long, fault_address) __field(unsigned int, error_code)) | , | ||
TP_fast_assign(__entry->fault_address=fault_address;__entry->error_code=error_code;) | , | ||
TP_printk("address %lx error_code %x", __entry->fault_address, __entry->error_code) | |||
) |
TRACE_EVENT | ( | kvm_msr | , |
TP_PROTO(unsigned write, u32 ecx, u64 data, bool exception) | , | ||
TP_ARGS(write, ecx, data, exception) | , | ||
TP_STRUCT__entry(__field(unsigned, write) __field(u32, ecx) __field(u64, data) __field(u8, exception)) | , | ||
TP_fast_assign(__entry->write=write;__entry->ecx=ecx;__entry->data=data;__entry->exception=exception;) | , | ||
TP_printk("msr_%s %x = 0x%llx%s", __entry->write?"write":"read", __entry->ecx, __entry->data, __entry->exception?" (#GP)":"") | |||
) |
TRACE_EVENT | ( | kvm_cr | , |
TP_PROTO(unsigned int rw, unsigned int cr, unsigned long val) | , | ||
TP_ARGS(rw, cr, val) | , | ||
TP_STRUCT__entry(__field(unsigned int, rw) __field(unsigned int, cr) __field(unsigned long, val)) | , | ||
TP_fast_assign(__entry->rw=rw;__entry->cr=cr;__entry->val=val;) | , | ||
TP_printk("cr_%s %x = 0x%lx", __entry->rw?"write":"read", __entry->cr, __entry->val) | |||
) |
TRACE_EVENT | ( | kvm_pic_set_irq | , |
TP_PROTO(__u8 chip, __u8 pin, __u8 elcr, __u8 imr, bool coalesced) | , | ||
TP_ARGS(chip, pin, elcr, imr, coalesced) | , | ||
TP_STRUCT__entry(__field(__u8, chip) __field(__u8, pin) __field(__u8, elcr) __field(__u8, imr) __field(bool, coalesced)) | , | ||
TP_fast_assign(__entry->chip=chip;__entry->pin=pin;__entry->elcr=elcr;__entry->imr=imr;__entry->coalesced=coalesced;) | , | ||
TP_printk("chip %u pin %u (%s%s)%s", __entry->chip, __entry->pin,(__entry->elcr &(1<< __entry->pin))?"level":"edge",(__entry->imr &(1<< __entry->pin))?"|masked":"", __entry->coalesced?" (coalesced)":"") | |||
) |
TRACE_EVENT | ( | kvm_apic_ipi | , |
TP_PROTO(__u32 icr_low, __u32 dest_id) | , | ||
TP_ARGS(icr_low, dest_id) | , | ||
TP_STRUCT__entry(__field(__u32, icr_low) __field(__u32, dest_id)) | , | ||
TP_fast_assign(__entry->icr_low=icr_low;__entry->dest_id=dest_id;) | , | ||
TP_printk("dst %x vec %u (%s|%s|%s|%s|%s)", __entry->dest_id,(u8) __entry->icr_low, __print_symbolic((__entry->icr_low >> 8 &0x7), kvm_deliver_mode),(__entry->icr_low &(1<< 11))?"logical":"physical",(__entry->icr_low &(1<< 14))?"assert":"de-assert",(__entry->icr_low &(1<< 15))?"level":"edge", __print_symbolic((__entry->icr_low >> 18 &0x3), kvm_apic_dst_shorthand)) | |||
) |
TRACE_EVENT | ( | kvm_apic_accept_irq | , |
TP_PROTO(__u32 apicid, __u16 dm, __u8 tm, __u8 vec, bool coalesced) | , | ||
TP_ARGS(apicid, dm, tm, vec, coalesced) | , | ||
TP_STRUCT__entry(__field(__u32, apicid) __field(__u16, dm) __field(__u8, tm) __field(__u8, vec) __field(bool, coalesced)) | , | ||
TP_fast_assign(__entry->apicid=apicid;__entry->dm=dm;__entry->tm=tm;__entry->vec=vec;__entry->coalesced=coalesced;) | , | ||
TP_printk("apicid %x vec %u (%s|%s)%s", __entry->apicid, __entry->vec, __print_symbolic((__entry->dm >> 8 &0x7), kvm_deliver_mode), __entry->tm?"level":"edge", __entry->coalesced?" (coalesced)":"") | |||
) |
TRACE_EVENT | ( | kvm_eoi | , |
TP_PROTO(struct kvm_lapic *apic, int vector) | , | ||
TP_ARGS(apic, vector) | , | ||
TP_STRUCT__entry(__field(__u32, apicid) __field(int, vector)) | , | ||
TP_fast_assign(__entry->apicid=apic->vcpu->vcpu_id;__entry->vector=vector;) | , | ||
TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) | |||
) |
TRACE_EVENT | ( | kvm_pv_eoi | , |
TP_PROTO(struct kvm_lapic *apic, int vector) | , | ||
TP_ARGS(apic, vector) | , | ||
TP_STRUCT__entry(__field(__u32, apicid) __field(int, vector)) | , | ||
TP_fast_assign(__entry->apicid=apic->vcpu->vcpu_id;__entry->vector=vector;) | , | ||
TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) | |||
) |
TRACE_EVENT | ( | kvm_nested_vmrun | , |
TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl, __u32 event_inj, bool npt) | , | ||
TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, npt) | , | ||
TP_STRUCT__entry(__field(__u64, rip) __field(__u64, vmcb) __field(__u64, nested_rip) __field(__u32, int_ctl) __field(__u32, event_inj) __field(bool, npt)) | , | ||
TP_fast_assign(__entry->rip=rip;__entry->vmcb=vmcb;__entry->nested_rip=nested_rip;__entry->int_ctl=int_ctl;__entry->event_inj=event_inj;__entry->npt=npt;) | , | ||
TP_printk("rip: 0x%016llx vmcb: 0x%016llx nrip: 0x%016llx int_ctl: 0x%08x ""event_inj: 0x%08x npt: %s", __entry->rip, __entry->vmcb, __entry->nested_rip, __entry->int_ctl, __entry->event_inj, __entry->npt?"on":"off") | |||
) |
TRACE_EVENT | ( | kvm_nested_intercepts | , |
TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions, __u64 intercept) | , | ||
TP_ARGS(cr_read, cr_write, exceptions, intercept) | , | ||
TP_STRUCT__entry(__field(__u16, cr_read) __field(__u16, cr_write) __field(__u32, exceptions) __field(__u64, intercept)) | , | ||
TP_fast_assign(__entry->cr_read=cr_read;__entry->cr_write=cr_write;__entry->exceptions=exceptions;__entry->intercept=intercept;) | , | ||
TP_printk("cr_read: %04x cr_write: %04x excp: %08x intercept: %016llx", __entry->cr_read, __entry->cr_write, __entry->exceptions, __entry->intercept) | |||
) |
TRACE_EVENT | ( | kvm_nested_vmexit | , |
TP_PROTO(__u64 rip, __u32 exit_code, __u64 exit_info1, __u64 exit_info2, __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa) | , | ||
TP_ARGS(rip, exit_code, exit_info1, exit_info2, exit_int_info, exit_int_info_err, isa) | , | ||
TP_STRUCT__entry(__field(__u64, rip) __field(__u32, exit_code) __field(__u64, exit_info1) __field(__u64, exit_info2) __field(__u32, exit_int_info) __field(__u32, exit_int_info_err) __field(__u32, isa)) | , | ||
TP_fast_assign(__entry->rip=rip;__entry->exit_code=exit_code;__entry->exit_info1=exit_info1;__entry->exit_info2=exit_info2;__entry->exit_int_info=exit_int_info;__entry->exit_int_info_err=exit_int_info_err;__entry->isa=isa;) | , | ||
TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx ""ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", __entry->rip,(__entry->isa==KVM_ISA_VMX)?__print_symbolic(__entry->exit_code, VMX_EXIT_REASONS):__print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), __entry->exit_info1, __entry->exit_info2, __entry->exit_int_info, __entry->exit_int_info_err) | |||
) |
TRACE_EVENT | ( | kvm_nested_vmexit_inject | , |
TP_PROTO(__u32 exit_code, __u64 exit_info1, __u64 exit_info2, __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa) | , | ||
TP_ARGS(exit_code, exit_info1, exit_info2, exit_int_info, exit_int_info_err, isa) | , | ||
TP_STRUCT__entry(__field(__u32, exit_code) __field(__u64, exit_info1) __field(__u64, exit_info2) __field(__u32, exit_int_info) __field(__u32, exit_int_info_err) __field(__u32, isa)) | , | ||
TP_fast_assign(__entry->exit_code=exit_code;__entry->exit_info1=exit_info1;__entry->exit_info2=exit_info2;__entry->exit_int_info=exit_int_info;__entry->exit_int_info_err=exit_int_info_err;__entry->isa=isa;) | , | ||
TP_printk("reason: %s ext_inf1: 0x%016llx ""ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x",(__entry->isa==KVM_ISA_VMX)?__print_symbolic(__entry->exit_code, VMX_EXIT_REASONS):__print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), __entry->exit_info1, __entry->exit_info2, __entry->exit_int_info, __entry->exit_int_info_err) | |||
) |
TRACE_EVENT | ( | kvm_nested_intr_vmexit | , |
TP_PROTO(__u64 rip) | , | ||
TP_ARGS(rip) | , | ||
TP_STRUCT__entry(__field(__u64, rip)) | , | ||
TP_fast_assign(__entry->rip=rip) | , | ||
TP_printk("rip: 0x%016llx", __entry->rip) | |||
) |
TRACE_EVENT | ( | kvm_invlpga | , |
TP_PROTO(__u64 rip, int asid, u64 address) | , | ||
TP_ARGS(rip, asid, address) | , | ||
TP_STRUCT__entry(__field(__u64, rip) __field(int, asid) __field(__u64, address)) | , | ||
TP_fast_assign(__entry->rip=rip;__entry->asid=asid;__entry->address=address;) | , | ||
TP_printk("rip: 0x%016llx asid: %d address: 0x%016llx", __entry->rip, __entry->asid, __entry->address) | |||
) |
TRACE_EVENT | ( | kvm_skinit | , |
TP_PROTO(__u64 rip, __u32 slb) | , | ||
TP_ARGS(rip, slb) | , | ||
TP_STRUCT__entry(__field(__u64, rip) __field(__u32, slb)) | , | ||
TP_fast_assign(__entry->rip=rip;__entry->slb=slb;) | , | ||
TP_printk("rip: 0x%016llx slb: 0x%08x", __entry->rip, __entry->slb) | |||
) |
TRACE_EVENT | ( | kvm_emulate_insn | , |
TP_PROTO(struct kvm_vcpu *vcpu, __u8 failed) | , | ||
TP_ARGS(vcpu, failed) | , | ||
TP_STRUCT__entry(__field(__u64, rip) __field(__u32, csbase) __field(__u8, len) __array(__u8, insn, 15) __field(__u8, flags) __field(__u8, failed)) | , | ||
TP_fast_assign(__entry->rip=vcpu->arch.emulate_ctxt.fetch.start;__entry->csbase=kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS);__entry->len=vcpu->arch.emulate_ctxt._eip-vcpu->arch.emulate_ctxt.fetch.start;memcpy(__entry->insn, vcpu->arch.emulate_ctxt.fetch.data, 15);__entry->flags=kei_decode_mode(vcpu->arch.emulate_ctxt.mode);__entry->failed=failed;) | , | ||
TP_printk("%x:%llx:%s (%s)%s", __entry->csbase, __entry->rip, __print_hex(__entry->insn, __entry->len), __print_symbolic(__entry->flags, kvm_trace_symbol_emul_flags), __entry->failed?" failed":"") | |||
) |
TRACE_EVENT | ( | vcpu_match_mmio | , |
TP_PROTO(gva_t gva, gpa_t gpa, bool write, bool gpa_match) | , | ||
TP_ARGS(gva, gpa, write, gpa_match) | , | ||
TP_STRUCT__entry(__field(gva_t, gva) __field(gpa_t, gpa) __field(bool, write) __field(bool, gpa_match)) | , | ||
TP_fast_assign(__entry->gva=gva;__entry->gpa=gpa;__entry->write=write;__entry->gpa_match=gpa_match) | , | ||
TP_printk("gva %#lx gpa %#llx %s %s", __entry->gva, __entry->gpa, __entry->write?"Write":"Read", __entry->gpa_match?"GPA":"GVA") | |||
) |