2 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
5 #include <linux/tracepoint.h>
8 #include <asm/clocksource.h>
9 #include <asm/pvclock-abi.h>
12 #define TRACE_SYSTEM kvm
18 TP_PROTO(
struct kvm_vcpu *vcpu),
22 __field(
unsigned int, vcpu_id )
23 __field(
unsigned long, rip )
27 __entry->vcpu_id = vcpu->vcpu_id;
31 TP_printk(
"vcpu %u, rip 0x%lx", __entry->vcpu_id, __entry->rip)
38 TP_PROTO(
unsigned long nr,
unsigned long a0,
unsigned long a1,
39 unsigned long a2,
unsigned long a3),
40 TP_ARGS(nr, a0, a1, a2, a3),
43 __field(
unsigned long, nr )
44 __field(
unsigned long, a0 )
45 __field(
unsigned long, a1 )
46 __field(
unsigned long, a2 )
47 __field(
unsigned long, a3 )
58 TP_printk(
"nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx",
59 __entry->nr, __entry->a0, __entry->a1, __entry->a2,
67 TP_PROTO(__u16 code,
bool fast, __u16 var_cnt, __u16 rep_cnt,
68 __u16 rep_idx, __u64 ingpa, __u64 outgpa),
69 TP_ARGS(code, fast, var_cnt, rep_cnt, rep_idx, ingpa, outgpa),
72 __field( __u16, rep_cnt )
73 __field( __u16, rep_idx )
74 __field( __u64, ingpa )
75 __field( __u64, outgpa )
76 __field( __u16, code )
77 __field( __u16, var_cnt )
82 __entry->rep_cnt = rep_cnt;
83 __entry->rep_idx = rep_idx;
84 __entry->ingpa = ingpa;
85 __entry->outgpa = outgpa;
87 __entry->var_cnt = var_cnt;
91 TP_printk(
"code 0x%x %s var_cnt 0x%x rep_cnt 0x%x idx 0x%x in 0x%llx out 0x%llx",
92 __entry->code, __entry->fast ?
"fast" :
"slow",
93 __entry->var_cnt, __entry->rep_cnt, __entry->rep_idx,
94 __entry->ingpa, __entry->outgpa)
102 __field(__u64, result)
106 __entry->result = result;
109 TP_printk(
"result 0x%llx", __entry->result)
116 TP_PROTO(u8 cpl,
unsigned long nr,
117 unsigned long a0,
unsigned long a1,
unsigned long a2,
118 unsigned long a3,
unsigned long a4,
unsigned long a5),
119 TP_ARGS(cpl, nr, a0, a1, a2, a3, a4, a5),
123 __field(
unsigned long, nr)
124 __field(
unsigned long, a0)
125 __field(
unsigned long, a1)
126 __field(
unsigned long, a2)
127 __field(
unsigned long, a3)
128 __field(
unsigned long, a4)
129 __field(
unsigned long, a5)
143 TP_printk(
"cpl %d nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx a4 0x%lx a5 %lx",
144 __entry->cpl, __entry->nr,
145 __entry->a0, __entry->a1, __entry->a2,
146 __entry->a3, __entry->a4, __entry->a5)
156 #define KVM_PIO_OUT 1
159 TP_PROTO(
unsigned int rw,
unsigned int port,
unsigned int size,
160 unsigned int count,
const void *data),
161 TP_ARGS(rw, port, size, count, data),
164 __field(
unsigned int, rw )
165 __field(
unsigned int, port )
166 __field(
unsigned int, size )
167 __field(
unsigned int, count )
168 __field(
unsigned int, val )
173 __entry->port = port;
174 __entry->size = size;
175 __entry->count = count;
177 __entry->val = *(
unsigned char *)data;
179 __entry->val = *(
unsigned short *)data;
181 __entry->val = *(
unsigned int *)data;
184 TP_printk(
"pio_%s at 0x%x size %d count %d val 0x%x %s",
185 __entry->rw ?
"write" :
"read",
186 __entry->port, __entry->size, __entry->count, __entry->val,
187 __entry->count > 1 ?
"(...)" :
"")
205 TP_printk(
"fast mmio at gpa 0x%llx", __entry->gpa)
212 TP_PROTO(
unsigned int function,
unsigned int index,
unsigned long rax,
213 unsigned long rbx,
unsigned long rcx,
unsigned long rdx,
214 bool found,
bool used_max_basic),
215 TP_ARGS(
function, index, rax, rbx, rcx, rdx, found, used_max_basic),
218 __field(
unsigned int,
function )
219 __field(
unsigned int, index )
220 __field(
unsigned long, rax )
221 __field(
unsigned long, rbx )
222 __field(
unsigned long, rcx )
223 __field(
unsigned long, rdx )
224 __field(
bool, found )
225 __field(
bool, used_max_basic )
229 __entry->function =
function;
230 __entry->index = index;
235 __entry->found = found;
236 __entry->used_max_basic = used_max_basic;
239 TP_printk(
"func %x idx %x rax %lx rbx %lx rcx %lx rdx %lx, cpuid entry %s%s",
240 __entry->function, __entry->index, __entry->rax,
241 __entry->rbx, __entry->rcx, __entry->rdx,
242 __entry->found ?
"found" :
"not found",
243 __entry->used_max_basic ?
", used max basic" :
"")
246 #define AREG(x) { APIC_##x, "APIC_" #x }
248 #define kvm_trace_symbol_apic \
249 AREG(ID), AREG(LVR), AREG(TASKPRI), AREG(ARBPRI), AREG(PROCPRI), \
250 AREG(EOI), AREG(RRR), AREG(LDR), AREG(DFR), AREG(SPIV), AREG(ISR), \
251 AREG(TMR), AREG(IRR), AREG(ESR), AREG(ICR), AREG(ICR2), AREG(LVTT), \
252 AREG(LVTTHMR), AREG(LVTPC), AREG(LVT0), AREG(LVT1), AREG(LVTERR), \
253 AREG(TMICT), AREG(TMCCT), AREG(TDCR), AREG(SELF_IPI), AREG(EFEAT), \
259 TP_PROTO(
unsigned int rw,
unsigned int reg, u64 val),
260 TP_ARGS(rw, reg, val),
263 __field(
unsigned int, rw )
264 __field(
unsigned int, reg )
274 TP_printk(
"apic_%s %s = 0x%llx",
275 __entry->rw ?
"write" :
"read",
280 #define trace_kvm_apic_read(reg, val) trace_kvm_apic(0, reg, val)
281 #define trace_kvm_apic_write(reg, val) trace_kvm_apic(1, reg, val)
283 #define KVM_ISA_VMX 1
284 #define KVM_ISA_SVM 2
286 #define kvm_print_exit_reason(exit_reason, isa) \
287 (isa == KVM_ISA_VMX) ? \
288 __print_symbolic(exit_reason & 0xffff, VMX_EXIT_REASONS) : \
289 __print_symbolic(exit_reason, SVM_EXIT_REASONS), \
290 (isa == KVM_ISA_VMX && exit_reason & ~0xffff) ? " " : "", \
291 (isa == KVM_ISA_VMX) ? \
292 __print_flags(exit_reason & ~0xffff, " ", VMX_EXIT_REASON_FLAGS) : ""
294 #define TRACE_EVENT_KVM_EXIT(name) \
296 TP_PROTO(struct kvm_vcpu *vcpu, u32 isa), \
297 TP_ARGS(vcpu, isa), \
300 __field( unsigned int, exit_reason ) \
301 __field( unsigned long, guest_rip ) \
302 __field( u32, isa ) \
303 __field( u64, info1 ) \
304 __field( u64, info2 ) \
305 __field( u32, intr_info ) \
306 __field( u32, error_code ) \
307 __field( unsigned int, vcpu_id ) \
311 __entry->guest_rip = kvm_rip_read(vcpu); \
312 __entry->isa = isa; \
313 __entry->vcpu_id = vcpu->vcpu_id; \
314 static_call(kvm_x86_get_exit_info)(vcpu, \
315 &__entry->exit_reason, \
318 &__entry->intr_info, \
319 &__entry->error_code); \
322 TP_printk("vcpu %u reason %s%s%s rip 0x%lx info1 0x%016llx " \
323 "info2 0x%016llx intr_info 0x%08x error_code 0x%08x", \
325 kvm_print_exit_reason(__entry->exit_reason, __entry->isa), \
326 __entry->guest_rip, __entry->info1, __entry->info2, \
327 __entry->intr_info, __entry->error_code) \
339 TP_PROTO(
unsigned int vector,
bool soft,
bool reinjected),
340 TP_ARGS(vector, soft, reinjected),
343 __field(
unsigned int, vector )
344 __field(
bool, soft )
345 __field(
bool, reinjected )
349 __entry->vector = vector;
350 __entry->soft = soft;
351 __entry->reinjected = reinjected;
354 TP_printk(
"%s 0x%x%s",
355 __entry->soft ?
"Soft/INTn" :
"IRQ", __entry->vector,
356 __entry->reinjected ?
" [reinjected]" :
"")
359 #define EXS(x) { x##_VECTOR, "#" #x }
361 #define kvm_trace_sym_exc \
362 EXS(DE), EXS(DB), EXS(BP), EXS(OF), EXS(BR), EXS(UD), EXS(NM), \
363 EXS(DF), EXS(TS), EXS(NP), EXS(SS), EXS(GP), EXS(PF), \
364 EXS(MF), EXS(AC), EXS(MC)
370 TP_PROTO(
unsigned exception,
bool has_error,
unsigned error_code,
372 TP_ARGS(exception, has_error, error_code, reinjected),
375 __field( u8, exception )
376 __field( u8, has_error )
377 __field( u32, error_code )
378 __field(
bool, reinjected )
382 __entry->exception = exception;
383 __entry->has_error = has_error;
384 __entry->error_code = error_code;
385 __entry->reinjected = reinjected;
388 TP_printk(
"%s%s%s%s%s",
390 !__entry->has_error ?
"" :
" (",
391 !__entry->has_error ?
"" : __print_symbolic(__entry->error_code, { }),
392 !__entry->has_error ?
"" :
")",
393 __entry->reinjected ?
" [reinjected]" :
"")
400 TP_PROTO(
struct kvm_vcpu *vcpu, u64 fault_address, u64 error_code),
401 TP_ARGS(vcpu, fault_address, error_code),
404 __field(
unsigned int, vcpu_id )
405 __field(
unsigned long, guest_rip )
406 __field( u64, fault_address )
407 __field( u64, error_code )
411 __entry->vcpu_id = vcpu->vcpu_id;
413 __entry->fault_address = fault_address;
414 __entry->error_code = error_code;
417 TP_printk(
"vcpu %u rip 0x%lx address 0x%016llx error_code 0x%llx",
418 __entry->vcpu_id, __entry->guest_rip,
419 __entry->fault_address, __entry->error_code)
426 TP_PROTO(
unsigned write, u32 ecx, u64 data,
bool exception),
427 TP_ARGS(write, ecx, data, exception),
430 __field(
unsigned, write )
433 __field( u8, exception )
437 __entry->write = write;
439 __entry->data = data;
440 __entry->exception = exception;
443 TP_printk(
"msr_%s %x = 0x%llx%s",
444 __entry->write ?
"write" :
"read",
445 __entry->ecx, __entry->data,
446 __entry->exception ?
" (#GP)" :
"")
449 #define trace_kvm_msr_read(ecx, data) trace_kvm_msr(0, ecx, data, false)
450 #define trace_kvm_msr_write(ecx, data) trace_kvm_msr(1, ecx, data, false)
451 #define trace_kvm_msr_read_ex(ecx) trace_kvm_msr(0, ecx, 0, true)
452 #define trace_kvm_msr_write_ex(ecx, data) trace_kvm_msr(1, ecx, data, true)
458 TP_PROTO(
unsigned int rw,
unsigned int cr,
unsigned long val),
459 TP_ARGS(rw, cr, val),
462 __field(
unsigned int, rw )
463 __field(
unsigned int, cr )
464 __field(
unsigned long, val )
473 TP_printk(
"cr_%s %x = 0x%lx",
474 __entry->rw ?
"write" :
"read",
475 __entry->cr, __entry->val)
478 #define trace_kvm_cr_read(cr, val) trace_kvm_cr(0, cr, val)
479 #define trace_kvm_cr_write(cr, val) trace_kvm_cr(1, cr, val)
482 TP_PROTO(__u8 chip, __u8 pin, __u8 elcr, __u8 imr,
bool coalesced),
483 TP_ARGS(chip, pin, elcr, imr, coalesced),
486 __field( __u8, chip )
488 __field( __u8, elcr )
490 __field(
bool, coalesced )
494 __entry->chip = chip;
496 __entry->elcr = elcr;
498 __entry->coalesced = coalesced;
501 TP_printk(
"chip %u pin %u (%s%s)%s",
502 __entry->chip, __entry->pin,
503 (__entry->elcr & (1 << __entry->pin)) ?
"level":
"edge",
504 (__entry->imr & (1 << __entry->pin)) ?
"|masked":
"",
505 __entry->coalesced ?
" (coalesced)" :
"")
508 #define kvm_apic_dst_shorthand \
512 {0x3, "all-but-self"}
515 TP_PROTO(__u32 icr_low, __u32 dest_id),
516 TP_ARGS(icr_low, dest_id),
519 __field( __u32, icr_low )
520 __field( __u32, dest_id )
524 __entry->icr_low = icr_low;
525 __entry->dest_id = dest_id;
528 TP_printk(
"dst %x vec %u (%s|%s|%s|%s|%s)",
529 __entry->dest_id, (u8)__entry->icr_low,
530 __print_symbolic((__entry->icr_low >> 8 & 0x7),
532 (__entry->icr_low & (1<<11)) ?
"logical" :
"physical",
533 (__entry->icr_low & (1<<14)) ?
"assert" :
"de-assert",
534 (__entry->icr_low & (1<<15)) ?
"level" :
"edge",
535 __print_symbolic((__entry->icr_low >> 18 & 0x3),
540 TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec),
541 TP_ARGS(apicid, dm, tm, vec),
544 __field( __u32, apicid )
551 __entry->apicid = apicid;
557 TP_printk(
"apicid %x vec %u (%s|%s)",
558 __entry->apicid, __entry->vec,
559 __print_symbolic((__entry->dm >> 8 & 0x7), kvm_deliver_mode),
560 __entry->tm ?
"level" :
"edge")
564 TP_PROTO(
struct kvm_lapic *apic,
int vector),
565 TP_ARGS(apic, vector),
568 __field( __u32, apicid )
569 __field(
int, vector )
573 __entry->apicid = apic->
vcpu->vcpu_id;
574 __entry->vector = vector;
577 TP_printk(
"apicid %x vector %d", __entry->apicid, __entry->vector)
581 TP_PROTO(
struct kvm_lapic *apic,
int vector),
582 TP_ARGS(apic, vector),
585 __field( __u32, apicid )
586 __field(
int, vector )
590 __entry->apicid = apic->
vcpu->vcpu_id;
591 __entry->vector = vector;
594 TP_printk(
"apicid %x vector %d", __entry->apicid, __entry->vector)
601 TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl,
602 __u32 event_inj,
bool tdp_enabled, __u64 guest_tdp_pgd,
603 __u64 guest_cr3, __u32 isa),
604 TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj,
tdp_enabled,
605 guest_tdp_pgd, guest_cr3, isa),
608 __field( __u64, rip )
609 __field( __u64, vmcb )
610 __field( __u64, nested_rip )
611 __field( __u32, int_ctl )
612 __field( __u32, event_inj )
614 __field( __u64, guest_pgd )
615 __field( __u32, isa )
620 __entry->vmcb = vmcb;
621 __entry->nested_rip = nested_rip;
622 __entry->int_ctl = int_ctl;
623 __entry->event_inj = event_inj;
625 __entry->guest_pgd =
tdp_enabled ? guest_tdp_pgd : guest_cr3;
629 TP_printk(
"rip: 0x%016llx %s: 0x%016llx nested_rip: 0x%016llx "
630 "int_ctl: 0x%08x event_inj: 0x%08x nested_%s=%s %s: 0x%016llx",
638 __entry->tdp_enabled ?
"y" :
"n",
639 !__entry->tdp_enabled ?
"guest_cr3" :
640 __entry->isa ==
KVM_ISA_VMX ?
"nested_eptp" :
"nested_cr3",
645 TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions,
646 __u32 intercept1, __u32 intercept2, __u32 intercept3),
647 TP_ARGS(cr_read, cr_write, exceptions, intercept1,
648 intercept2, intercept3),
651 __field( __u16, cr_read )
652 __field( __u16, cr_write )
653 __field( __u32, exceptions )
654 __field( __u32, intercept1 )
655 __field( __u32, intercept2 )
656 __field( __u32, intercept3 )
660 __entry->cr_read = cr_read;
661 __entry->cr_write = cr_write;
662 __entry->exceptions = exceptions;
663 __entry->intercept1 = intercept1;
664 __entry->intercept2 = intercept2;
665 __entry->intercept3 = intercept3;
668 TP_printk(
"cr_read: %04x cr_write: %04x excp: %08x "
669 "intercepts: %08x %08x %08x",
670 __entry->cr_read, __entry->cr_write, __entry->exceptions,
671 __entry->intercept1, __entry->intercept2, __entry->intercept3)
682 TP_PROTO(__u32 exit_code,
683 __u64 exit_info1, __u64 exit_info2,
684 __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa),
685 TP_ARGS(exit_code, exit_info1, exit_info2,
686 exit_int_info, exit_int_info_err, isa),
689 __field( __u32, exit_code )
690 __field( __u64, exit_info1 )
691 __field( __u64, exit_info2 )
692 __field( __u32, exit_int_info )
693 __field( __u32, exit_int_info_err )
694 __field( __u32, isa )
698 __entry->exit_code = exit_code;
699 __entry->exit_info1 = exit_info1;
700 __entry->exit_info2 = exit_info2;
701 __entry->exit_int_info = exit_int_info;
702 __entry->exit_int_info_err = exit_int_info_err;
706 TP_printk(
"reason: %s%s%s ext_inf1: 0x%016llx "
707 "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x",
709 __entry->exit_info1, __entry->exit_info2,
710 __entry->exit_int_info, __entry->exit_int_info_err)
721 __field( __u64, rip )
728 TP_printk(
"rip: 0x%016llx", __entry->rip)
735 TP_PROTO(__u64 rip,
unsigned int asid, u64 address),
736 TP_ARGS(rip, asid, address),
739 __field( __u64, rip )
740 __field(
unsigned int, asid )
741 __field( __u64, address )
746 __entry->asid = asid;
747 __entry->address = address;
750 TP_printk(
"rip: 0x%016llx asid: %u address: 0x%016llx",
751 __entry->rip, __entry->asid, __entry->address)
758 TP_PROTO(__u64 rip, __u32 slb),
762 __field( __u64, rip )
763 __field( __u32, slb )
771 TP_printk(
"rip: 0x%016llx slb: 0x%08x",
772 __entry->rip, __entry->slb)
775 #define KVM_EMUL_INSN_F_CR0_PE (1 << 0)
776 #define KVM_EMUL_INSN_F_EFL_VM (1 << 1)
777 #define KVM_EMUL_INSN_F_CS_D (1 << 2)
778 #define KVM_EMUL_INSN_F_CS_L (1 << 3)
780 #define kvm_trace_symbol_emul_flags \
782 { KVM_EMUL_INSN_F_CR0_PE \
783 | KVM_EMUL_INSN_F_EFL_VM, "vm16" }, \
784 { KVM_EMUL_INSN_F_CR0_PE, "prot16" }, \
785 { KVM_EMUL_INSN_F_CR0_PE \
786 | KVM_EMUL_INSN_F_CS_D, "prot32" }, \
787 { KVM_EMUL_INSN_F_CR0_PE \
788 | KVM_EMUL_INSN_F_CS_L, "prot64" }
790 #define kei_decode_mode(mode) ({ \
793 case X86EMUL_MODE_REAL: \
796 case X86EMUL_MODE_VM86: \
797 flags = KVM_EMUL_INSN_F_EFL_VM; \
799 case X86EMUL_MODE_PROT16: \
800 flags = KVM_EMUL_INSN_F_CR0_PE; \
802 case X86EMUL_MODE_PROT32: \
803 flags = KVM_EMUL_INSN_F_CR0_PE \
804 | KVM_EMUL_INSN_F_CS_D; \
806 case X86EMUL_MODE_PROT64: \
807 flags = KVM_EMUL_INSN_F_CR0_PE \
808 | KVM_EMUL_INSN_F_CS_L; \
815 TP_PROTO(
struct kvm_vcpu *vcpu, __u8 failed),
816 TP_ARGS(vcpu, failed),
819 __field( __u64, rip )
820 __field( __u32, csbase )
822 __array( __u8, insn, 15 )
823 __field( __u8,
flags )
824 __field( __u8, failed )
828 __entry->csbase = static_call(kvm_x86_get_segment_base)(vcpu, VCPU_SREG_CS);
829 __entry->len = vcpu->arch.emulate_ctxt->fetch.ptr
830 - vcpu->arch.emulate_ctxt->fetch.data;
831 __entry->rip = vcpu->arch.emulate_ctxt->_eip - __entry->len;
832 memcpy(__entry->insn,
833 vcpu->arch.emulate_ctxt->fetch.data,
836 __entry->failed = failed;
839 TP_printk(
"%x:%llx:%s (%s)%s",
840 __entry->csbase, __entry->rip,
841 __print_hex(__entry->insn, __entry->len),
842 __print_symbolic(__entry->flags,
844 __entry->failed ?
" failed" :
""
848 #define trace_kvm_emulate_insn_start(vcpu) trace_kvm_emulate_insn(vcpu, 0)
849 #define trace_kvm_emulate_insn_failed(vcpu) trace_kvm_emulate_insn(vcpu, 1)
853 TP_PROTO(gva_t gva, gpa_t gpa,
bool write,
bool gpa_match),
854 TP_ARGS(gva, gpa, write, gpa_match),
860 __field(
bool, gpa_match)
866 __entry->write = write;
867 __entry->gpa_match = gpa_match
870 TP_printk(
"gva %#lx gpa %#llx %s %s", __entry->gva, __entry->gpa,
871 __entry->write ?
"Write" :
"Read",
872 __entry->gpa_match ?
"GPA" :
"GVA")
876 TP_PROTO(
unsigned int vcpu_id, __u64 previous_tsc_offset,
877 __u64 next_tsc_offset),
878 TP_ARGS(vcpu_id, previous_tsc_offset, next_tsc_offset),
881 __field(
unsigned int, vcpu_id )
882 __field( __u64, previous_tsc_offset )
883 __field( __u64, next_tsc_offset )
887 __entry->vcpu_id = vcpu_id;
888 __entry->previous_tsc_offset = previous_tsc_offset;
889 __entry->next_tsc_offset = next_tsc_offset;
892 TP_printk(
"vcpu=%u prev=%llu next=%llu", __entry->vcpu_id,
893 __entry->previous_tsc_offset, __entry->next_tsc_offset)
898 #define host_clocks \
899 {VDSO_CLOCKMODE_NONE, "none"}, \
900 {VDSO_CLOCKMODE_TSC, "tsc"} \
903 TP_PROTO(
bool use_master_clock,
unsigned int host_clock,
bool offset_matched),
904 TP_ARGS(use_master_clock, host_clock, offset_matched),
907 __field(
bool, use_master_clock )
908 __field(
unsigned int, host_clock )
909 __field(
bool, offset_matched )
913 __entry->use_master_clock = use_master_clock;
914 __entry->host_clock = host_clock;
915 __entry->offset_matched = offset_matched;
918 TP_printk(
"masterclock %d hostclock %s offsetmatched %u",
919 __entry->use_master_clock,
920 __print_symbolic(__entry->host_clock, host_clocks),
921 __entry->offset_matched)
925 TP_PROTO(
unsigned int vcpu_id,
unsigned int nr_matched,
926 unsigned int online_vcpus,
bool use_master_clock,
927 unsigned int host_clock),
928 TP_ARGS(vcpu_id, nr_matched, online_vcpus, use_master_clock,
932 __field(
unsigned int, vcpu_id )
933 __field(
unsigned int, nr_vcpus_matched_tsc )
934 __field(
unsigned int, online_vcpus )
935 __field(
bool, use_master_clock )
936 __field(
unsigned int, host_clock )
940 __entry->vcpu_id = vcpu_id;
941 __entry->nr_vcpus_matched_tsc = nr_matched;
942 __entry->online_vcpus = online_vcpus;
943 __entry->use_master_clock = use_master_clock;
944 __entry->host_clock = host_clock;
947 TP_printk(
"vcpu_id %u masterclock %u offsetmatched %u nr_online %u"
949 __entry->vcpu_id, __entry->use_master_clock,
950 __entry->nr_vcpus_matched_tsc, __entry->online_vcpus,
951 __print_symbolic(__entry->host_clock, host_clocks))
960 TP_PROTO(
unsigned int vcpu_id),
964 __field(
unsigned int, vcpu_id )
968 __entry->vcpu_id = vcpu_id;
971 TP_printk(
"vcpu %d: PML full", __entry->vcpu_id)
975 TP_PROTO(
unsigned int vcpu_id,
unsigned int new,
unsigned int old),
976 TP_ARGS(vcpu_id,
new, old),
979 __field(
unsigned int, vcpu_id )
980 __field(
unsigned int,
new )
981 __field(
unsigned int, old )
985 __entry->vcpu_id = vcpu_id;
990 TP_printk(
"vcpu %u old %u new %u (%s)",
991 __entry->vcpu_id, __entry->old, __entry->new,
992 __entry->old < __entry->new ?
"growed" :
"shrinked")
996 TP_PROTO(
unsigned int vcpu_id,
struct pvclock_vcpu_time_info *pvclock),
997 TP_ARGS(vcpu_id, pvclock),
1000 __field(
unsigned int, vcpu_id )
1001 __field( __u32, version )
1002 __field( __u64, tsc_timestamp )
1003 __field( __u64, system_time )
1004 __field( __u32, tsc_to_system_mul )
1005 __field( __s8, tsc_shift )
1006 __field( __u8,
flags )
1010 __entry->vcpu_id = vcpu_id;
1011 __entry->version = pvclock->version;
1012 __entry->tsc_timestamp = pvclock->tsc_timestamp;
1013 __entry->system_time = pvclock->system_time;
1014 __entry->tsc_to_system_mul = pvclock->tsc_to_system_mul;
1015 __entry->tsc_shift = pvclock->tsc_shift;
1016 __entry->flags = pvclock->flags;
1019 TP_printk(
"vcpu_id %u, pvclock { version %u, tsc_timestamp 0x%llx, "
1020 "system_time 0x%llx, tsc_to_system_mul 0x%x, tsc_shift %d, "
1024 __entry->tsc_timestamp,
1025 __entry->system_time,
1026 __entry->tsc_to_system_mul,
1032 TP_PROTO(
unsigned int vcpu_id, s64 delta),
1033 TP_ARGS(vcpu_id, delta),
1036 __field(
unsigned int, vcpu_id )
1037 __field( s64, delta )
1041 __entry->vcpu_id = vcpu_id;
1042 __entry->delta = delta;
1045 TP_printk(
"vcpu %u: delta %lld (%s)",
1048 __entry->delta < 0 ?
"early" :
"late")
1052 TP_PROTO(
unsigned int vcpu_id, u64 smbase,
bool entering),
1053 TP_ARGS(vcpu_id, smbase, entering),
1056 __field(
unsigned int, vcpu_id )
1057 __field( u64, smbase )
1058 __field(
bool, entering )
1062 __entry->vcpu_id = vcpu_id;
1063 __entry->smbase = smbase;
1064 __entry->entering = entering;
1067 TP_printk(
"vcpu %u: %s SMM, smbase 0x%llx",
1069 __entry->entering ?
"entering" :
"leaving",
1077 TP_PROTO(
unsigned int host_irq,
unsigned int vcpu_id,
1078 unsigned int gsi,
unsigned int gvec,
1079 u64 pi_desc_addr,
bool set),
1080 TP_ARGS(host_irq, vcpu_id, gsi, gvec, pi_desc_addr, set),
1083 __field(
unsigned int, host_irq )
1084 __field(
unsigned int, vcpu_id )
1085 __field(
unsigned int, gsi )
1086 __field(
unsigned int, gvec )
1087 __field( u64, pi_desc_addr )
1088 __field(
bool, set )
1092 __entry->host_irq = host_irq;
1093 __entry->vcpu_id = vcpu_id;
1095 __entry->gvec = gvec;
1096 __entry->pi_desc_addr = pi_desc_addr;
1100 TP_printk(
"VT-d PI is %s for irq %u, vcpu %u, gsi: 0x%x, "
1101 "gvec: 0x%x, pi_desc_addr: 0x%llx",
1102 __entry->set ?
"enabled and being updated" :
"disabled",
1107 __entry->pi_desc_addr)
1114 TP_PROTO(
int vcpu_id, u32 sint),
1115 TP_ARGS(vcpu_id, sint),
1118 __field(
int, vcpu_id)
1123 __entry->vcpu_id = vcpu_id;
1124 __entry->sint = sint;
1127 TP_printk(
"vcpu_id %d sint %u", __entry->vcpu_id, __entry->sint)
1134 TP_PROTO(
int vcpu_id, u32 sint,
int vector,
int ret),
1135 TP_ARGS(vcpu_id, sint, vector, ret),
1138 __field(
int, vcpu_id)
1140 __field(
int, vector)
1145 __entry->vcpu_id = vcpu_id;
1146 __entry->sint = sint;
1147 __entry->vector = vector;
1151 TP_printk(
"vcpu_id %d sint %u vector %d ret %d",
1152 __entry->vcpu_id, __entry->sint, __entry->vector,
1160 TP_PROTO(
int vcpu_id,
int vector),
1161 TP_ARGS(vcpu_id, vector),
1164 __field(
int, vcpu_id)
1166 __field(
int, vector)
1171 __entry->vcpu_id = vcpu_id;
1172 __entry->vector = vector;
1175 TP_printk(
"vcpu_id %d vector %d", __entry->vcpu_id, __entry->vector)
1182 TP_PROTO(
int vcpu_id, u32 msr, u64 data,
bool host),
1183 TP_ARGS(vcpu_id, msr, data, host),
1186 __field(
int, vcpu_id)
1193 __entry->vcpu_id = vcpu_id;
1195 __entry->data = data;
1196 __entry->host = host
1199 TP_printk(
"vcpu_id %d msr 0x%x data 0x%llx host %d",
1200 __entry->vcpu_id, __entry->msr, __entry->data, __entry->host)
1207 TP_PROTO(
int vcpu_id,
int timer_index, u64 config,
bool host),
1208 TP_ARGS(vcpu_id, timer_index, config, host),
1211 __field(
int, vcpu_id)
1212 __field(
int, timer_index)
1213 __field(u64, config)
1218 __entry->vcpu_id = vcpu_id;
1219 __entry->timer_index = timer_index;
1220 __entry->config = config;
1221 __entry->host = host;
1224 TP_printk(
"vcpu_id %d timer %d config 0x%llx host %d",
1225 __entry->vcpu_id, __entry->timer_index, __entry->config,
1233 TP_PROTO(
int vcpu_id,
int timer_index, u64 count,
bool host),
1234 TP_ARGS(vcpu_id, timer_index, count, host),
1237 __field(
int, vcpu_id)
1238 __field(
int, timer_index)
1244 __entry->vcpu_id = vcpu_id;
1245 __entry->timer_index = timer_index;
1246 __entry->count = count;
1247 __entry->host = host;
1250 TP_printk(
"vcpu_id %d timer %d count %llu host %d",
1251 __entry->vcpu_id, __entry->timer_index, __entry->count,
1259 TP_PROTO(
int vcpu_id,
int timer_index, u64 time_now, u64 exp_time),
1260 TP_ARGS(vcpu_id, timer_index, time_now, exp_time),
1263 __field(
int, vcpu_id)
1264 __field(
int, timer_index)
1265 __field(u64, time_now)
1266 __field(u64, exp_time)
1270 __entry->vcpu_id = vcpu_id;
1271 __entry->timer_index = timer_index;
1272 __entry->time_now = time_now;
1273 __entry->exp_time = exp_time;
1276 TP_printk(
"vcpu_id %d timer %d time_now %llu exp_time %llu",
1277 __entry->vcpu_id, __entry->timer_index, __entry->time_now,
1285 TP_PROTO(
int vcpu_id,
int timer_index, u64 time_now, u64 count),
1286 TP_ARGS(vcpu_id, timer_index, time_now, count),
1289 __field(
int, vcpu_id)
1290 __field(
int, timer_index)
1291 __field(u64, time_now)
1296 __entry->vcpu_id = vcpu_id;
1297 __entry->timer_index = timer_index;
1298 __entry->time_now = time_now;
1299 __entry->count = count;
1302 TP_printk(
"vcpu_id %d timer %d time_now %llu count %llu",
1303 __entry->vcpu_id, __entry->timer_index, __entry->time_now,
1311 TP_PROTO(
int vcpu_id,
int timer_index),
1312 TP_ARGS(vcpu_id, timer_index),
1315 __field(
int, vcpu_id)
1316 __field(
int, timer_index)
1320 __entry->vcpu_id = vcpu_id;
1321 __entry->timer_index = timer_index;
1324 TP_printk(
"vcpu_id %d timer %d",
1325 __entry->vcpu_id, __entry->timer_index)
1332 TP_PROTO(
int vcpu_id,
int timer_index,
int direct,
int msg_send_result),
1333 TP_ARGS(vcpu_id, timer_index, direct, msg_send_result),
1336 __field(
int, vcpu_id)
1337 __field(
int, timer_index)
1338 __field(
int, direct)
1339 __field(
int, msg_send_result)
1343 __entry->vcpu_id = vcpu_id;
1344 __entry->timer_index = timer_index;
1345 __entry->direct = direct;
1346 __entry->msg_send_result = msg_send_result;
1349 TP_printk(
"vcpu_id %d timer %d direct %d send result %d",
1350 __entry->vcpu_id, __entry->timer_index,
1351 __entry->direct, __entry->msg_send_result)
1358 TP_PROTO(
int vcpu_id,
int timer_index),
1359 TP_ARGS(vcpu_id, timer_index),
1362 __field(
int, vcpu_id)
1363 __field(
int, timer_index)
1367 __entry->vcpu_id = vcpu_id;
1368 __entry->timer_index = timer_index;
1371 TP_printk(
"vcpu_id %d timer %d",
1372 __entry->vcpu_id, __entry->timer_index)
1376 TP_PROTO(
int reason,
bool set,
unsigned long inhibits),
1377 TP_ARGS(reason, set, inhibits),
1380 __field(
int, reason)
1382 __field(
unsigned long, inhibits)
1386 __entry->reason = reason;
1388 __entry->inhibits = inhibits;
1391 TP_printk(
"%s reason=%u, inhibits=0x%lx",
1392 __entry->set ?
"set" :
"cleared",
1393 __entry->reason, __entry->inhibits)
1397 TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec),
1398 TP_ARGS(apicid, dm, tm, vec),
1401 __field( __u32, apicid )
1402 __field( __u16, dm )
1403 __field( __u16, tm )
1404 __field( __u8, vec )
1408 __entry->apicid = apicid;
1414 TP_printk(
"apicid %x vec %u (%s|%s)",
1415 __entry->apicid, __entry->vec,
1416 __print_symbolic((__entry->dm >> 8 & 0x7), kvm_deliver_mode),
1417 __entry->tm ?
"level" :
"edge")
1424 TP_PROTO(u32 vcpu, u32 icrh, u32 icrl, u32
id, u32 index),
1425 TP_ARGS(vcpu, icrh, icrl,
id, index),
1436 __entry->vcpu = vcpu;
1437 __entry->icrh = icrh;
1438 __entry->icrl = icrl;
1440 __entry->index = index;
1443 TP_printk(
"vcpu=%u, icrh:icrl=%#010x:%08x, id=%u, index=%u",
1444 __entry->vcpu, __entry->icrh, __entry->icrl,
1445 __entry->id, __entry->index)
1449 TP_PROTO(u32 vcpu, u32 offset,
bool ft,
bool rw, u32 vec),
1450 TP_ARGS(vcpu, offset, ft, rw, vec),
1454 __field(u32, offset)
1461 __entry->vcpu = vcpu;
1462 __entry->offset = offset;
1468 TP_printk(
"vcpu=%u, offset=%#x(%s), %s, %s, vec=%#x",
1472 __entry->ft ?
"trap" :
"fault",
1473 __entry->rw ?
"write" :
"read",
1478 TP_PROTO(u32 vmid, u32 vcpuid),
1479 TP_ARGS(vmid, vcpuid),
1483 __field(u32, vcpuid)
1487 __entry->vmid = vmid;
1488 __entry->vcpuid = vcpuid;
1491 TP_printk(
"vmid=%u, vcpuid=%u",
1492 __entry->vmid, __entry->vcpuid)
1496 TP_PROTO(u32 icrh, u32 icrl, u32 index),
1497 TP_ARGS(icrh, icrl, index),
1506 __entry->icrh = icrh;
1507 __entry->icrl = icrl;
1508 __entry->index = index;
1511 TP_printk(
"icrh:icrl=%#08x:%08x, index=%u",
1512 __entry->icrh, __entry->icrl, __entry->index)
1516 TP_PROTO(u32 vcpuid, u32 apicid),
1517 TP_ARGS(vcpuid, apicid),
1520 __field(u32, vcpuid)
1521 __field(u32, apicid)
1525 __entry->vcpuid = vcpuid;
1526 __entry->apicid = apicid;
1529 TP_printk(
"vcpuid=%u, apicid=%u",
1530 __entry->vcpuid, __entry->apicid)
1534 TP_PROTO(
unsigned int vcpu_id,
unsigned int hv_timer_in_use),
1535 TP_ARGS(vcpu_id, hv_timer_in_use),
1537 __field(
unsigned int, vcpu_id)
1538 __field(
unsigned int, hv_timer_in_use)
1541 __entry->vcpu_id = vcpu_id;
1542 __entry->hv_timer_in_use = hv_timer_in_use;
1544 TP_printk(
"vcpu_id %x hv_timer %x",
1546 __entry->hv_timer_in_use)
1553 TP_PROTO(u64 processor_mask, u64 address_space, u64
flags,
bool guest_mode),
1554 TP_ARGS(processor_mask, address_space,
flags, guest_mode),
1557 __field(u64, processor_mask)
1558 __field(u64, address_space)
1560 __field(
bool, guest_mode)
1564 __entry->processor_mask = processor_mask;
1565 __entry->address_space = address_space;
1566 __entry->flags =
flags;
1567 __entry->guest_mode = guest_mode;
1570 TP_printk(
"processor_mask 0x%llx address_space 0x%llx flags 0x%llx %s",
1571 __entry->processor_mask, __entry->address_space,
1572 __entry->flags, __entry->guest_mode ?
"(L2)" :
"")
1579 TP_PROTO(u64 valid_bank_mask, u64 format, u64 address_space, u64
flags,
bool guest_mode),
1580 TP_ARGS(valid_bank_mask, format, address_space,
flags, guest_mode),
1583 __field(u64, valid_bank_mask)
1584 __field(u64, format)
1585 __field(u64, address_space)
1587 __field(
bool, guest_mode)
1591 __entry->valid_bank_mask = valid_bank_mask;
1592 __entry->format = format;
1593 __entry->address_space = address_space;
1594 __entry->flags =
flags;
1595 __entry->guest_mode = guest_mode;
1598 TP_printk(
"valid_bank_mask 0x%llx format 0x%llx "
1599 "address_space 0x%llx flags 0x%llx %s",
1600 __entry->valid_bank_mask, __entry->format,
1601 __entry->address_space, __entry->flags,
1602 __entry->guest_mode ?
"(L2)" :
"")
1609 TP_PROTO(u32 vector, u64 processor_mask),
1610 TP_ARGS(vector, processor_mask),
1613 __field(u32, vector)
1614 __field(u64, processor_mask)
1618 __entry->vector = vector;
1619 __entry->processor_mask = processor_mask;
1622 TP_printk(
"vector %x processor_mask 0x%llx",
1623 __entry->vector, __entry->processor_mask)
1627 TP_PROTO(u32 vector, u64 format, u64 valid_bank_mask),
1628 TP_ARGS(vector, format, valid_bank_mask),
1631 __field(u32, vector)
1632 __field(u64, format)
1633 __field(u64, valid_bank_mask)
1637 __entry->vector = vector;
1638 __entry->format = format;
1639 __entry->valid_bank_mask = valid_bank_mask;
1642 TP_printk(
"vector %x format %llx valid_bank_mask 0x%llx",
1643 __entry->vector, __entry->format,
1644 __entry->valid_bank_mask)
1648 TP_PROTO(
unsigned int vcpu_id,
bool need_flush_tlb),
1649 TP_ARGS(vcpu_id, need_flush_tlb),
1652 __field(
unsigned int, vcpu_id )
1653 __field(
bool, need_flush_tlb )
1657 __entry->vcpu_id = vcpu_id;
1658 __entry->need_flush_tlb = need_flush_tlb;
1661 TP_printk(
"vcpu %u need_flush_tlb %s", __entry->vcpu_id,
1662 __entry->need_flush_tlb ?
"true" :
"false")
1669 TP_PROTO(
const char *msg, u32 err),
1678 __assign_str(msg, msg);
1682 TP_printk(
"%s%s", __get_str(msg), !__entry->err ?
"" :
1683 __print_symbolic(__entry->err, VMX_VMENTER_INSTRUCTION_ERRORS))
1690 TP_PROTO(
int vcpu_id, u32 vp_index, u32 msr, u64 data),
1691 TP_ARGS(vcpu_id, vp_index, msr, data),
1694 __field(
int, vcpu_id)
1695 __field(u32, vp_index)
1701 __entry->vcpu_id = vcpu_id;
1702 __entry->vp_index = vp_index;
1704 __entry->data = data;
1707 TP_printk(
"vcpu_id %d vp_index %u msr 0x%x data 0x%llx",
1708 __entry->vcpu_id, __entry->vp_index, __entry->msr,
1716 TP_PROTO(
int vcpu_id, u32 vp_index, u32 msr, u64 data),
1717 TP_ARGS(vcpu_id, vp_index, msr, data),
1720 __field(
int, vcpu_id)
1721 __field(u32, vp_index)
1727 __entry->vcpu_id = vcpu_id;
1728 __entry->vp_index = vp_index;
1730 __entry->data = data;
1733 TP_printk(
"vcpu_id %d vp_index %u msr 0x%x data 0x%llx",
1734 __entry->vcpu_id, __entry->vp_index, __entry->msr,
1742 TP_PROTO(
unsigned int vcpu_id,
struct ghcb *ghcb),
1743 TP_ARGS(vcpu_id, ghcb),
1746 __field(
unsigned int, vcpu_id)
1747 __field(u64, exit_reason)
1753 __entry->vcpu_id = vcpu_id;
1754 __entry->exit_reason = ghcb->save.sw_exit_code;
1755 __entry->info1 = ghcb->save.sw_exit_info_1;
1756 __entry->info2 = ghcb->save.sw_exit_info_2;
1759 TP_printk(
"vcpu %u, exit_reason %llx, exit_info1 %llx, exit_info2 %llx",
1760 __entry->vcpu_id, __entry->exit_reason,
1761 __entry->info1, __entry->info2)
1768 TP_PROTO(
unsigned int vcpu_id,
struct ghcb *ghcb),
1769 TP_ARGS(vcpu_id, ghcb),
1772 __field(
unsigned int, vcpu_id)
1773 __field(u64, exit_reason)
1779 __entry->vcpu_id = vcpu_id;
1780 __entry->exit_reason = ghcb->save.sw_exit_code;
1781 __entry->info1 = ghcb->save.sw_exit_info_1;
1782 __entry->info2 = ghcb->save.sw_exit_info_2;
1785 TP_printk(
"vcpu %u, exit_reason %llx, exit_info1 %llx, exit_info2 %llx",
1786 __entry->vcpu_id, __entry->exit_reason,
1787 __entry->info1, __entry->info2)
1794 TP_PROTO(
unsigned int vcpu_id, u64 ghcb_gpa),
1795 TP_ARGS(vcpu_id, ghcb_gpa),
1798 __field(
unsigned int, vcpu_id)
1799 __field(u64, ghcb_gpa)
1803 __entry->vcpu_id = vcpu_id;
1804 __entry->ghcb_gpa = ghcb_gpa;
1807 TP_printk(
"vcpu %u, ghcb_gpa %016llx",
1808 __entry->vcpu_id, __entry->ghcb_gpa)
1815 TP_PROTO(
unsigned int vcpu_id, u64 ghcb_gpa,
int result),
1816 TP_ARGS(vcpu_id, ghcb_gpa, result),
1819 __field(
unsigned int, vcpu_id)
1820 __field(u64, ghcb_gpa)
1821 __field(
int, result)
1825 __entry->vcpu_id = vcpu_id;
1826 __entry->ghcb_gpa = ghcb_gpa;
1827 __entry->result = result;
1830 TP_printk(
"vcpu %u, ghcb_gpa %016llx, result %d",
1831 __entry->vcpu_id, __entry->ghcb_gpa, __entry->result)
1836 #undef TRACE_INCLUDE_PATH
1837 #define TRACE_INCLUDE_PATH /home/alisa/linux_host/arch/x86/kvm
1838 #undef TRACE_INCLUDE_FILE
1839 #define TRACE_INCLUDE_FILE trace
1842 #include <trace/define_trace.h>
bool kvm_cpuid(struct kvm_vcpu *vcpu, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx, bool exact_only)
void kvm_hv_synic_send_eoi(struct kvm_vcpu *vcpu, int vector)
static u64 kvm_hv_send_ipi(struct kvm_vcpu *vcpu, struct kvm_hv_hcall *hc)
int kvm_hv_synic_set_irq(struct kvm *kvm, u32 vpidx, u32 sint)
static void kvm_hv_notify_acked_sint(struct kvm_vcpu *vcpu, u32 sint)
static u64 kvm_hv_flush_tlb(struct kvm_vcpu *vcpu, struct kvm_hv_hcall *hc)
int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
int kvm_pic_set_irq(struct kvm_pic *s, int irq, int irq_source_id, int level)
static unsigned long kvm_rip_read(struct kvm_vcpu *vcpu)
void kvm_wait_lapic_expire(struct kvm_vcpu *vcpu)
TRACE_EVENT(kvm_entry, TP_PROTO(struct kvm_vcpu *vcpu), TP_ARGS(vcpu), TP_STRUCT__entry(__field(unsigned int, vcpu_id) __field(unsigned long, rip)), TP_fast_assign(__entry->vcpu_id=vcpu->vcpu_id;__entry->rip=kvm_rip_read(vcpu);), TP_printk("vcpu %u, rip 0x%lx", __entry->vcpu_id, __entry->rip))
#define kvm_print_exit_reason(exit_reason, isa)
#define kvm_trace_symbol_emul_flags
#define kvm_apic_dst_shorthand
#define kvm_trace_sym_exc
#define kei_decode_mode(mode)
#define kvm_trace_symbol_apic
#define TRACE_EVENT_KVM_EXIT(name)
int kvm_xen_hypercall(struct kvm_vcpu *vcpu)