162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) 362306a36Sopenharmony_ci#define _TRACE_KVM_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/tracepoint.h> 662306a36Sopenharmony_ci#include <asm/vmx.h> 762306a36Sopenharmony_ci#include <asm/svm.h> 862306a36Sopenharmony_ci#include <asm/clocksource.h> 962306a36Sopenharmony_ci#include <asm/pvclock-abi.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#undef TRACE_SYSTEM 1262306a36Sopenharmony_ci#define TRACE_SYSTEM kvm 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* 1562306a36Sopenharmony_ci * Tracepoint for guest mode entry. 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ciTRACE_EVENT(kvm_entry, 1862306a36Sopenharmony_ci TP_PROTO(struct kvm_vcpu *vcpu), 1962306a36Sopenharmony_ci TP_ARGS(vcpu), 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci TP_STRUCT__entry( 2262306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 2362306a36Sopenharmony_ci __field( unsigned long, rip ) 2462306a36Sopenharmony_ci ), 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci TP_fast_assign( 2762306a36Sopenharmony_ci __entry->vcpu_id = vcpu->vcpu_id; 2862306a36Sopenharmony_ci __entry->rip = kvm_rip_read(vcpu); 2962306a36Sopenharmony_ci ), 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci TP_printk("vcpu %u, rip 0x%lx", __entry->vcpu_id, __entry->rip) 3262306a36Sopenharmony_ci); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* 3562306a36Sopenharmony_ci * Tracepoint for hypercall. 3662306a36Sopenharmony_ci */ 3762306a36Sopenharmony_ciTRACE_EVENT(kvm_hypercall, 3862306a36Sopenharmony_ci TP_PROTO(unsigned long nr, unsigned long a0, unsigned long a1, 3962306a36Sopenharmony_ci unsigned long a2, unsigned long a3), 4062306a36Sopenharmony_ci TP_ARGS(nr, a0, a1, a2, a3), 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci TP_STRUCT__entry( 4362306a36Sopenharmony_ci __field( unsigned long, nr ) 4462306a36Sopenharmony_ci __field( unsigned long, a0 ) 4562306a36Sopenharmony_ci __field( unsigned long, a1 ) 4662306a36Sopenharmony_ci __field( unsigned long, a2 ) 4762306a36Sopenharmony_ci __field( unsigned long, a3 ) 4862306a36Sopenharmony_ci ), 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci TP_fast_assign( 5162306a36Sopenharmony_ci __entry->nr = nr; 5262306a36Sopenharmony_ci __entry->a0 = a0; 5362306a36Sopenharmony_ci __entry->a1 = a1; 5462306a36Sopenharmony_ci __entry->a2 = a2; 5562306a36Sopenharmony_ci __entry->a3 = a3; 5662306a36Sopenharmony_ci ), 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci TP_printk("nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx", 5962306a36Sopenharmony_ci __entry->nr, __entry->a0, __entry->a1, __entry->a2, 6062306a36Sopenharmony_ci __entry->a3) 6162306a36Sopenharmony_ci); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci/* 6462306a36Sopenharmony_ci * Tracepoint for hypercall. 6562306a36Sopenharmony_ci */ 6662306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_hypercall, 6762306a36Sopenharmony_ci TP_PROTO(__u16 code, bool fast, __u16 var_cnt, __u16 rep_cnt, 6862306a36Sopenharmony_ci __u16 rep_idx, __u64 ingpa, __u64 outgpa), 6962306a36Sopenharmony_ci TP_ARGS(code, fast, var_cnt, rep_cnt, rep_idx, ingpa, outgpa), 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci TP_STRUCT__entry( 7262306a36Sopenharmony_ci __field( __u16, rep_cnt ) 7362306a36Sopenharmony_ci __field( __u16, rep_idx ) 7462306a36Sopenharmony_ci __field( __u64, ingpa ) 7562306a36Sopenharmony_ci __field( __u64, outgpa ) 7662306a36Sopenharmony_ci __field( __u16, code ) 7762306a36Sopenharmony_ci __field( __u16, var_cnt ) 7862306a36Sopenharmony_ci __field( bool, fast ) 7962306a36Sopenharmony_ci ), 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci TP_fast_assign( 8262306a36Sopenharmony_ci __entry->rep_cnt = rep_cnt; 8362306a36Sopenharmony_ci __entry->rep_idx = rep_idx; 8462306a36Sopenharmony_ci __entry->ingpa = ingpa; 8562306a36Sopenharmony_ci __entry->outgpa = outgpa; 8662306a36Sopenharmony_ci __entry->code = code; 8762306a36Sopenharmony_ci __entry->var_cnt = var_cnt; 8862306a36Sopenharmony_ci __entry->fast = fast; 8962306a36Sopenharmony_ci ), 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci TP_printk("code 0x%x %s var_cnt 0x%x rep_cnt 0x%x idx 0x%x in 0x%llx out 0x%llx", 9262306a36Sopenharmony_ci __entry->code, __entry->fast ? "fast" : "slow", 9362306a36Sopenharmony_ci __entry->var_cnt, __entry->rep_cnt, __entry->rep_idx, 9462306a36Sopenharmony_ci __entry->ingpa, __entry->outgpa) 9562306a36Sopenharmony_ci); 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_hypercall_done, 9862306a36Sopenharmony_ci TP_PROTO(u64 result), 9962306a36Sopenharmony_ci TP_ARGS(result), 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci TP_STRUCT__entry( 10262306a36Sopenharmony_ci __field(__u64, result) 10362306a36Sopenharmony_ci ), 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci TP_fast_assign( 10662306a36Sopenharmony_ci __entry->result = result; 10762306a36Sopenharmony_ci ), 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci TP_printk("result 0x%llx", __entry->result) 11062306a36Sopenharmony_ci); 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci/* 11362306a36Sopenharmony_ci * Tracepoint for Xen hypercall. 11462306a36Sopenharmony_ci */ 11562306a36Sopenharmony_ciTRACE_EVENT(kvm_xen_hypercall, 11662306a36Sopenharmony_ci TP_PROTO(u8 cpl, unsigned long nr, 11762306a36Sopenharmony_ci unsigned long a0, unsigned long a1, unsigned long a2, 11862306a36Sopenharmony_ci unsigned long a3, unsigned long a4, unsigned long a5), 11962306a36Sopenharmony_ci TP_ARGS(cpl, nr, a0, a1, a2, a3, a4, a5), 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci TP_STRUCT__entry( 12262306a36Sopenharmony_ci __field(u8, cpl) 12362306a36Sopenharmony_ci __field(unsigned long, nr) 12462306a36Sopenharmony_ci __field(unsigned long, a0) 12562306a36Sopenharmony_ci __field(unsigned long, a1) 12662306a36Sopenharmony_ci __field(unsigned long, a2) 12762306a36Sopenharmony_ci __field(unsigned long, a3) 12862306a36Sopenharmony_ci __field(unsigned long, a4) 12962306a36Sopenharmony_ci __field(unsigned long, a5) 13062306a36Sopenharmony_ci ), 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci TP_fast_assign( 13362306a36Sopenharmony_ci __entry->cpl = cpl; 13462306a36Sopenharmony_ci __entry->nr = nr; 13562306a36Sopenharmony_ci __entry->a0 = a0; 13662306a36Sopenharmony_ci __entry->a1 = a1; 13762306a36Sopenharmony_ci __entry->a2 = a2; 13862306a36Sopenharmony_ci __entry->a3 = a3; 13962306a36Sopenharmony_ci __entry->a4 = a4; 14062306a36Sopenharmony_ci __entry->a4 = a5; 14162306a36Sopenharmony_ci ), 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci TP_printk("cpl %d nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx a4 0x%lx a5 %lx", 14462306a36Sopenharmony_ci __entry->cpl, __entry->nr, 14562306a36Sopenharmony_ci __entry->a0, __entry->a1, __entry->a2, 14662306a36Sopenharmony_ci __entry->a3, __entry->a4, __entry->a5) 14762306a36Sopenharmony_ci); 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci/* 15262306a36Sopenharmony_ci * Tracepoint for PIO. 15362306a36Sopenharmony_ci */ 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci#define KVM_PIO_IN 0 15662306a36Sopenharmony_ci#define KVM_PIO_OUT 1 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ciTRACE_EVENT(kvm_pio, 15962306a36Sopenharmony_ci TP_PROTO(unsigned int rw, unsigned int port, unsigned int size, 16062306a36Sopenharmony_ci unsigned int count, const void *data), 16162306a36Sopenharmony_ci TP_ARGS(rw, port, size, count, data), 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci TP_STRUCT__entry( 16462306a36Sopenharmony_ci __field( unsigned int, rw ) 16562306a36Sopenharmony_ci __field( unsigned int, port ) 16662306a36Sopenharmony_ci __field( unsigned int, size ) 16762306a36Sopenharmony_ci __field( unsigned int, count ) 16862306a36Sopenharmony_ci __field( unsigned int, val ) 16962306a36Sopenharmony_ci ), 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci TP_fast_assign( 17262306a36Sopenharmony_ci __entry->rw = rw; 17362306a36Sopenharmony_ci __entry->port = port; 17462306a36Sopenharmony_ci __entry->size = size; 17562306a36Sopenharmony_ci __entry->count = count; 17662306a36Sopenharmony_ci if (size == 1) 17762306a36Sopenharmony_ci __entry->val = *(unsigned char *)data; 17862306a36Sopenharmony_ci else if (size == 2) 17962306a36Sopenharmony_ci __entry->val = *(unsigned short *)data; 18062306a36Sopenharmony_ci else 18162306a36Sopenharmony_ci __entry->val = *(unsigned int *)data; 18262306a36Sopenharmony_ci ), 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci TP_printk("pio_%s at 0x%x size %d count %d val 0x%x %s", 18562306a36Sopenharmony_ci __entry->rw ? "write" : "read", 18662306a36Sopenharmony_ci __entry->port, __entry->size, __entry->count, __entry->val, 18762306a36Sopenharmony_ci __entry->count > 1 ? "(...)" : "") 18862306a36Sopenharmony_ci); 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci/* 19162306a36Sopenharmony_ci * Tracepoint for fast mmio. 19262306a36Sopenharmony_ci */ 19362306a36Sopenharmony_ciTRACE_EVENT(kvm_fast_mmio, 19462306a36Sopenharmony_ci TP_PROTO(u64 gpa), 19562306a36Sopenharmony_ci TP_ARGS(gpa), 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci TP_STRUCT__entry( 19862306a36Sopenharmony_ci __field(u64, gpa) 19962306a36Sopenharmony_ci ), 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci TP_fast_assign( 20262306a36Sopenharmony_ci __entry->gpa = gpa; 20362306a36Sopenharmony_ci ), 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci TP_printk("fast mmio at gpa 0x%llx", __entry->gpa) 20662306a36Sopenharmony_ci); 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci/* 20962306a36Sopenharmony_ci * Tracepoint for cpuid. 21062306a36Sopenharmony_ci */ 21162306a36Sopenharmony_ciTRACE_EVENT(kvm_cpuid, 21262306a36Sopenharmony_ci TP_PROTO(unsigned int function, unsigned int index, unsigned long rax, 21362306a36Sopenharmony_ci unsigned long rbx, unsigned long rcx, unsigned long rdx, 21462306a36Sopenharmony_ci bool found, bool used_max_basic), 21562306a36Sopenharmony_ci TP_ARGS(function, index, rax, rbx, rcx, rdx, found, used_max_basic), 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci TP_STRUCT__entry( 21862306a36Sopenharmony_ci __field( unsigned int, function ) 21962306a36Sopenharmony_ci __field( unsigned int, index ) 22062306a36Sopenharmony_ci __field( unsigned long, rax ) 22162306a36Sopenharmony_ci __field( unsigned long, rbx ) 22262306a36Sopenharmony_ci __field( unsigned long, rcx ) 22362306a36Sopenharmony_ci __field( unsigned long, rdx ) 22462306a36Sopenharmony_ci __field( bool, found ) 22562306a36Sopenharmony_ci __field( bool, used_max_basic ) 22662306a36Sopenharmony_ci ), 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ci TP_fast_assign( 22962306a36Sopenharmony_ci __entry->function = function; 23062306a36Sopenharmony_ci __entry->index = index; 23162306a36Sopenharmony_ci __entry->rax = rax; 23262306a36Sopenharmony_ci __entry->rbx = rbx; 23362306a36Sopenharmony_ci __entry->rcx = rcx; 23462306a36Sopenharmony_ci __entry->rdx = rdx; 23562306a36Sopenharmony_ci __entry->found = found; 23662306a36Sopenharmony_ci __entry->used_max_basic = used_max_basic; 23762306a36Sopenharmony_ci ), 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci TP_printk("func %x idx %x rax %lx rbx %lx rcx %lx rdx %lx, cpuid entry %s%s", 24062306a36Sopenharmony_ci __entry->function, __entry->index, __entry->rax, 24162306a36Sopenharmony_ci __entry->rbx, __entry->rcx, __entry->rdx, 24262306a36Sopenharmony_ci __entry->found ? "found" : "not found", 24362306a36Sopenharmony_ci __entry->used_max_basic ? ", used max basic" : "") 24462306a36Sopenharmony_ci); 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci#define AREG(x) { APIC_##x, "APIC_" #x } 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci#define kvm_trace_symbol_apic \ 24962306a36Sopenharmony_ci AREG(ID), AREG(LVR), AREG(TASKPRI), AREG(ARBPRI), AREG(PROCPRI), \ 25062306a36Sopenharmony_ci AREG(EOI), AREG(RRR), AREG(LDR), AREG(DFR), AREG(SPIV), AREG(ISR), \ 25162306a36Sopenharmony_ci AREG(TMR), AREG(IRR), AREG(ESR), AREG(ICR), AREG(ICR2), AREG(LVTT), \ 25262306a36Sopenharmony_ci AREG(LVTTHMR), AREG(LVTPC), AREG(LVT0), AREG(LVT1), AREG(LVTERR), \ 25362306a36Sopenharmony_ci AREG(TMICT), AREG(TMCCT), AREG(TDCR), AREG(SELF_IPI), AREG(EFEAT), \ 25462306a36Sopenharmony_ci AREG(ECTRL) 25562306a36Sopenharmony_ci/* 25662306a36Sopenharmony_ci * Tracepoint for apic access. 25762306a36Sopenharmony_ci */ 25862306a36Sopenharmony_ciTRACE_EVENT(kvm_apic, 25962306a36Sopenharmony_ci TP_PROTO(unsigned int rw, unsigned int reg, u64 val), 26062306a36Sopenharmony_ci TP_ARGS(rw, reg, val), 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci TP_STRUCT__entry( 26362306a36Sopenharmony_ci __field( unsigned int, rw ) 26462306a36Sopenharmony_ci __field( unsigned int, reg ) 26562306a36Sopenharmony_ci __field( u64, val ) 26662306a36Sopenharmony_ci ), 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci TP_fast_assign( 26962306a36Sopenharmony_ci __entry->rw = rw; 27062306a36Sopenharmony_ci __entry->reg = reg; 27162306a36Sopenharmony_ci __entry->val = val; 27262306a36Sopenharmony_ci ), 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci TP_printk("apic_%s %s = 0x%llx", 27562306a36Sopenharmony_ci __entry->rw ? "write" : "read", 27662306a36Sopenharmony_ci __print_symbolic(__entry->reg, kvm_trace_symbol_apic), 27762306a36Sopenharmony_ci __entry->val) 27862306a36Sopenharmony_ci); 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci#define trace_kvm_apic_read(reg, val) trace_kvm_apic(0, reg, val) 28162306a36Sopenharmony_ci#define trace_kvm_apic_write(reg, val) trace_kvm_apic(1, reg, val) 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci#define KVM_ISA_VMX 1 28462306a36Sopenharmony_ci#define KVM_ISA_SVM 2 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci#define kvm_print_exit_reason(exit_reason, isa) \ 28762306a36Sopenharmony_ci (isa == KVM_ISA_VMX) ? \ 28862306a36Sopenharmony_ci __print_symbolic(exit_reason & 0xffff, VMX_EXIT_REASONS) : \ 28962306a36Sopenharmony_ci __print_symbolic(exit_reason, SVM_EXIT_REASONS), \ 29062306a36Sopenharmony_ci (isa == KVM_ISA_VMX && exit_reason & ~0xffff) ? " " : "", \ 29162306a36Sopenharmony_ci (isa == KVM_ISA_VMX) ? \ 29262306a36Sopenharmony_ci __print_flags(exit_reason & ~0xffff, " ", VMX_EXIT_REASON_FLAGS) : "" 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_ci#define TRACE_EVENT_KVM_EXIT(name) \ 29562306a36Sopenharmony_ciTRACE_EVENT(name, \ 29662306a36Sopenharmony_ci TP_PROTO(struct kvm_vcpu *vcpu, u32 isa), \ 29762306a36Sopenharmony_ci TP_ARGS(vcpu, isa), \ 29862306a36Sopenharmony_ci \ 29962306a36Sopenharmony_ci TP_STRUCT__entry( \ 30062306a36Sopenharmony_ci __field( unsigned int, exit_reason ) \ 30162306a36Sopenharmony_ci __field( unsigned long, guest_rip ) \ 30262306a36Sopenharmony_ci __field( u32, isa ) \ 30362306a36Sopenharmony_ci __field( u64, info1 ) \ 30462306a36Sopenharmony_ci __field( u64, info2 ) \ 30562306a36Sopenharmony_ci __field( u32, intr_info ) \ 30662306a36Sopenharmony_ci __field( u32, error_code ) \ 30762306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) \ 30862306a36Sopenharmony_ci ), \ 30962306a36Sopenharmony_ci \ 31062306a36Sopenharmony_ci TP_fast_assign( \ 31162306a36Sopenharmony_ci __entry->guest_rip = kvm_rip_read(vcpu); \ 31262306a36Sopenharmony_ci __entry->isa = isa; \ 31362306a36Sopenharmony_ci __entry->vcpu_id = vcpu->vcpu_id; \ 31462306a36Sopenharmony_ci static_call(kvm_x86_get_exit_info)(vcpu, \ 31562306a36Sopenharmony_ci &__entry->exit_reason, \ 31662306a36Sopenharmony_ci &__entry->info1, \ 31762306a36Sopenharmony_ci &__entry->info2, \ 31862306a36Sopenharmony_ci &__entry->intr_info, \ 31962306a36Sopenharmony_ci &__entry->error_code); \ 32062306a36Sopenharmony_ci ), \ 32162306a36Sopenharmony_ci \ 32262306a36Sopenharmony_ci TP_printk("vcpu %u reason %s%s%s rip 0x%lx info1 0x%016llx " \ 32362306a36Sopenharmony_ci "info2 0x%016llx intr_info 0x%08x error_code 0x%08x", \ 32462306a36Sopenharmony_ci __entry->vcpu_id, \ 32562306a36Sopenharmony_ci kvm_print_exit_reason(__entry->exit_reason, __entry->isa), \ 32662306a36Sopenharmony_ci __entry->guest_rip, __entry->info1, __entry->info2, \ 32762306a36Sopenharmony_ci __entry->intr_info, __entry->error_code) \ 32862306a36Sopenharmony_ci) 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci/* 33162306a36Sopenharmony_ci * Tracepoint for kvm guest exit: 33262306a36Sopenharmony_ci */ 33362306a36Sopenharmony_ciTRACE_EVENT_KVM_EXIT(kvm_exit); 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci/* 33662306a36Sopenharmony_ci * Tracepoint for kvm interrupt injection: 33762306a36Sopenharmony_ci */ 33862306a36Sopenharmony_ciTRACE_EVENT(kvm_inj_virq, 33962306a36Sopenharmony_ci TP_PROTO(unsigned int vector, bool soft, bool reinjected), 34062306a36Sopenharmony_ci TP_ARGS(vector, soft, reinjected), 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci TP_STRUCT__entry( 34362306a36Sopenharmony_ci __field( unsigned int, vector ) 34462306a36Sopenharmony_ci __field( bool, soft ) 34562306a36Sopenharmony_ci __field( bool, reinjected ) 34662306a36Sopenharmony_ci ), 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci TP_fast_assign( 34962306a36Sopenharmony_ci __entry->vector = vector; 35062306a36Sopenharmony_ci __entry->soft = soft; 35162306a36Sopenharmony_ci __entry->reinjected = reinjected; 35262306a36Sopenharmony_ci ), 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci TP_printk("%s 0x%x%s", 35562306a36Sopenharmony_ci __entry->soft ? "Soft/INTn" : "IRQ", __entry->vector, 35662306a36Sopenharmony_ci __entry->reinjected ? " [reinjected]" : "") 35762306a36Sopenharmony_ci); 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci#define EXS(x) { x##_VECTOR, "#" #x } 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci#define kvm_trace_sym_exc \ 36262306a36Sopenharmony_ci EXS(DE), EXS(DB), EXS(BP), EXS(OF), EXS(BR), EXS(UD), EXS(NM), \ 36362306a36Sopenharmony_ci EXS(DF), EXS(TS), EXS(NP), EXS(SS), EXS(GP), EXS(PF), \ 36462306a36Sopenharmony_ci EXS(MF), EXS(AC), EXS(MC) 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ci/* 36762306a36Sopenharmony_ci * Tracepoint for kvm interrupt injection: 36862306a36Sopenharmony_ci */ 36962306a36Sopenharmony_ciTRACE_EVENT(kvm_inj_exception, 37062306a36Sopenharmony_ci TP_PROTO(unsigned exception, bool has_error, unsigned error_code, 37162306a36Sopenharmony_ci bool reinjected), 37262306a36Sopenharmony_ci TP_ARGS(exception, has_error, error_code, reinjected), 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci TP_STRUCT__entry( 37562306a36Sopenharmony_ci __field( u8, exception ) 37662306a36Sopenharmony_ci __field( u8, has_error ) 37762306a36Sopenharmony_ci __field( u32, error_code ) 37862306a36Sopenharmony_ci __field( bool, reinjected ) 37962306a36Sopenharmony_ci ), 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_ci TP_fast_assign( 38262306a36Sopenharmony_ci __entry->exception = exception; 38362306a36Sopenharmony_ci __entry->has_error = has_error; 38462306a36Sopenharmony_ci __entry->error_code = error_code; 38562306a36Sopenharmony_ci __entry->reinjected = reinjected; 38662306a36Sopenharmony_ci ), 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_ci TP_printk("%s%s%s%s%s", 38962306a36Sopenharmony_ci __print_symbolic(__entry->exception, kvm_trace_sym_exc), 39062306a36Sopenharmony_ci !__entry->has_error ? "" : " (", 39162306a36Sopenharmony_ci !__entry->has_error ? "" : __print_symbolic(__entry->error_code, { }), 39262306a36Sopenharmony_ci !__entry->has_error ? "" : ")", 39362306a36Sopenharmony_ci __entry->reinjected ? " [reinjected]" : "") 39462306a36Sopenharmony_ci); 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ci/* 39762306a36Sopenharmony_ci * Tracepoint for page fault. 39862306a36Sopenharmony_ci */ 39962306a36Sopenharmony_ciTRACE_EVENT(kvm_page_fault, 40062306a36Sopenharmony_ci TP_PROTO(struct kvm_vcpu *vcpu, u64 fault_address, u64 error_code), 40162306a36Sopenharmony_ci TP_ARGS(vcpu, fault_address, error_code), 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci TP_STRUCT__entry( 40462306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 40562306a36Sopenharmony_ci __field( unsigned long, guest_rip ) 40662306a36Sopenharmony_ci __field( u64, fault_address ) 40762306a36Sopenharmony_ci __field( u64, error_code ) 40862306a36Sopenharmony_ci ), 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_ci TP_fast_assign( 41162306a36Sopenharmony_ci __entry->vcpu_id = vcpu->vcpu_id; 41262306a36Sopenharmony_ci __entry->guest_rip = kvm_rip_read(vcpu); 41362306a36Sopenharmony_ci __entry->fault_address = fault_address; 41462306a36Sopenharmony_ci __entry->error_code = error_code; 41562306a36Sopenharmony_ci ), 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_ci TP_printk("vcpu %u rip 0x%lx address 0x%016llx error_code 0x%llx", 41862306a36Sopenharmony_ci __entry->vcpu_id, __entry->guest_rip, 41962306a36Sopenharmony_ci __entry->fault_address, __entry->error_code) 42062306a36Sopenharmony_ci); 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci/* 42362306a36Sopenharmony_ci * Tracepoint for guest MSR access. 42462306a36Sopenharmony_ci */ 42562306a36Sopenharmony_ciTRACE_EVENT(kvm_msr, 42662306a36Sopenharmony_ci TP_PROTO(unsigned write, u32 ecx, u64 data, bool exception), 42762306a36Sopenharmony_ci TP_ARGS(write, ecx, data, exception), 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_ci TP_STRUCT__entry( 43062306a36Sopenharmony_ci __field( unsigned, write ) 43162306a36Sopenharmony_ci __field( u32, ecx ) 43262306a36Sopenharmony_ci __field( u64, data ) 43362306a36Sopenharmony_ci __field( u8, exception ) 43462306a36Sopenharmony_ci ), 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci TP_fast_assign( 43762306a36Sopenharmony_ci __entry->write = write; 43862306a36Sopenharmony_ci __entry->ecx = ecx; 43962306a36Sopenharmony_ci __entry->data = data; 44062306a36Sopenharmony_ci __entry->exception = exception; 44162306a36Sopenharmony_ci ), 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_ci TP_printk("msr_%s %x = 0x%llx%s", 44462306a36Sopenharmony_ci __entry->write ? "write" : "read", 44562306a36Sopenharmony_ci __entry->ecx, __entry->data, 44662306a36Sopenharmony_ci __entry->exception ? " (#GP)" : "") 44762306a36Sopenharmony_ci); 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_ci#define trace_kvm_msr_read(ecx, data) trace_kvm_msr(0, ecx, data, false) 45062306a36Sopenharmony_ci#define trace_kvm_msr_write(ecx, data) trace_kvm_msr(1, ecx, data, false) 45162306a36Sopenharmony_ci#define trace_kvm_msr_read_ex(ecx) trace_kvm_msr(0, ecx, 0, true) 45262306a36Sopenharmony_ci#define trace_kvm_msr_write_ex(ecx, data) trace_kvm_msr(1, ecx, data, true) 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_ci/* 45562306a36Sopenharmony_ci * Tracepoint for guest CR access. 45662306a36Sopenharmony_ci */ 45762306a36Sopenharmony_ciTRACE_EVENT(kvm_cr, 45862306a36Sopenharmony_ci TP_PROTO(unsigned int rw, unsigned int cr, unsigned long val), 45962306a36Sopenharmony_ci TP_ARGS(rw, cr, val), 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ci TP_STRUCT__entry( 46262306a36Sopenharmony_ci __field( unsigned int, rw ) 46362306a36Sopenharmony_ci __field( unsigned int, cr ) 46462306a36Sopenharmony_ci __field( unsigned long, val ) 46562306a36Sopenharmony_ci ), 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci TP_fast_assign( 46862306a36Sopenharmony_ci __entry->rw = rw; 46962306a36Sopenharmony_ci __entry->cr = cr; 47062306a36Sopenharmony_ci __entry->val = val; 47162306a36Sopenharmony_ci ), 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_ci TP_printk("cr_%s %x = 0x%lx", 47462306a36Sopenharmony_ci __entry->rw ? "write" : "read", 47562306a36Sopenharmony_ci __entry->cr, __entry->val) 47662306a36Sopenharmony_ci); 47762306a36Sopenharmony_ci 47862306a36Sopenharmony_ci#define trace_kvm_cr_read(cr, val) trace_kvm_cr(0, cr, val) 47962306a36Sopenharmony_ci#define trace_kvm_cr_write(cr, val) trace_kvm_cr(1, cr, val) 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_ciTRACE_EVENT(kvm_pic_set_irq, 48262306a36Sopenharmony_ci TP_PROTO(__u8 chip, __u8 pin, __u8 elcr, __u8 imr, bool coalesced), 48362306a36Sopenharmony_ci TP_ARGS(chip, pin, elcr, imr, coalesced), 48462306a36Sopenharmony_ci 48562306a36Sopenharmony_ci TP_STRUCT__entry( 48662306a36Sopenharmony_ci __field( __u8, chip ) 48762306a36Sopenharmony_ci __field( __u8, pin ) 48862306a36Sopenharmony_ci __field( __u8, elcr ) 48962306a36Sopenharmony_ci __field( __u8, imr ) 49062306a36Sopenharmony_ci __field( bool, coalesced ) 49162306a36Sopenharmony_ci ), 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ci TP_fast_assign( 49462306a36Sopenharmony_ci __entry->chip = chip; 49562306a36Sopenharmony_ci __entry->pin = pin; 49662306a36Sopenharmony_ci __entry->elcr = elcr; 49762306a36Sopenharmony_ci __entry->imr = imr; 49862306a36Sopenharmony_ci __entry->coalesced = coalesced; 49962306a36Sopenharmony_ci ), 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ci TP_printk("chip %u pin %u (%s%s)%s", 50262306a36Sopenharmony_ci __entry->chip, __entry->pin, 50362306a36Sopenharmony_ci (__entry->elcr & (1 << __entry->pin)) ? "level":"edge", 50462306a36Sopenharmony_ci (__entry->imr & (1 << __entry->pin)) ? "|masked":"", 50562306a36Sopenharmony_ci __entry->coalesced ? " (coalesced)" : "") 50662306a36Sopenharmony_ci); 50762306a36Sopenharmony_ci 50862306a36Sopenharmony_ci#define kvm_apic_dst_shorthand \ 50962306a36Sopenharmony_ci {0x0, "dst"}, \ 51062306a36Sopenharmony_ci {0x1, "self"}, \ 51162306a36Sopenharmony_ci {0x2, "all"}, \ 51262306a36Sopenharmony_ci {0x3, "all-but-self"} 51362306a36Sopenharmony_ci 51462306a36Sopenharmony_ciTRACE_EVENT(kvm_apic_ipi, 51562306a36Sopenharmony_ci TP_PROTO(__u32 icr_low, __u32 dest_id), 51662306a36Sopenharmony_ci TP_ARGS(icr_low, dest_id), 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_ci TP_STRUCT__entry( 51962306a36Sopenharmony_ci __field( __u32, icr_low ) 52062306a36Sopenharmony_ci __field( __u32, dest_id ) 52162306a36Sopenharmony_ci ), 52262306a36Sopenharmony_ci 52362306a36Sopenharmony_ci TP_fast_assign( 52462306a36Sopenharmony_ci __entry->icr_low = icr_low; 52562306a36Sopenharmony_ci __entry->dest_id = dest_id; 52662306a36Sopenharmony_ci ), 52762306a36Sopenharmony_ci 52862306a36Sopenharmony_ci TP_printk("dst %x vec %u (%s|%s|%s|%s|%s)", 52962306a36Sopenharmony_ci __entry->dest_id, (u8)__entry->icr_low, 53062306a36Sopenharmony_ci __print_symbolic((__entry->icr_low >> 8 & 0x7), 53162306a36Sopenharmony_ci kvm_deliver_mode), 53262306a36Sopenharmony_ci (__entry->icr_low & (1<<11)) ? "logical" : "physical", 53362306a36Sopenharmony_ci (__entry->icr_low & (1<<14)) ? "assert" : "de-assert", 53462306a36Sopenharmony_ci (__entry->icr_low & (1<<15)) ? "level" : "edge", 53562306a36Sopenharmony_ci __print_symbolic((__entry->icr_low >> 18 & 0x3), 53662306a36Sopenharmony_ci kvm_apic_dst_shorthand)) 53762306a36Sopenharmony_ci); 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ciTRACE_EVENT(kvm_apic_accept_irq, 54062306a36Sopenharmony_ci TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec), 54162306a36Sopenharmony_ci TP_ARGS(apicid, dm, tm, vec), 54262306a36Sopenharmony_ci 54362306a36Sopenharmony_ci TP_STRUCT__entry( 54462306a36Sopenharmony_ci __field( __u32, apicid ) 54562306a36Sopenharmony_ci __field( __u16, dm ) 54662306a36Sopenharmony_ci __field( __u16, tm ) 54762306a36Sopenharmony_ci __field( __u8, vec ) 54862306a36Sopenharmony_ci ), 54962306a36Sopenharmony_ci 55062306a36Sopenharmony_ci TP_fast_assign( 55162306a36Sopenharmony_ci __entry->apicid = apicid; 55262306a36Sopenharmony_ci __entry->dm = dm; 55362306a36Sopenharmony_ci __entry->tm = tm; 55462306a36Sopenharmony_ci __entry->vec = vec; 55562306a36Sopenharmony_ci ), 55662306a36Sopenharmony_ci 55762306a36Sopenharmony_ci TP_printk("apicid %x vec %u (%s|%s)", 55862306a36Sopenharmony_ci __entry->apicid, __entry->vec, 55962306a36Sopenharmony_ci __print_symbolic((__entry->dm >> 8 & 0x7), kvm_deliver_mode), 56062306a36Sopenharmony_ci __entry->tm ? "level" : "edge") 56162306a36Sopenharmony_ci); 56262306a36Sopenharmony_ci 56362306a36Sopenharmony_ciTRACE_EVENT(kvm_eoi, 56462306a36Sopenharmony_ci TP_PROTO(struct kvm_lapic *apic, int vector), 56562306a36Sopenharmony_ci TP_ARGS(apic, vector), 56662306a36Sopenharmony_ci 56762306a36Sopenharmony_ci TP_STRUCT__entry( 56862306a36Sopenharmony_ci __field( __u32, apicid ) 56962306a36Sopenharmony_ci __field( int, vector ) 57062306a36Sopenharmony_ci ), 57162306a36Sopenharmony_ci 57262306a36Sopenharmony_ci TP_fast_assign( 57362306a36Sopenharmony_ci __entry->apicid = apic->vcpu->vcpu_id; 57462306a36Sopenharmony_ci __entry->vector = vector; 57562306a36Sopenharmony_ci ), 57662306a36Sopenharmony_ci 57762306a36Sopenharmony_ci TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) 57862306a36Sopenharmony_ci); 57962306a36Sopenharmony_ci 58062306a36Sopenharmony_ciTRACE_EVENT(kvm_pv_eoi, 58162306a36Sopenharmony_ci TP_PROTO(struct kvm_lapic *apic, int vector), 58262306a36Sopenharmony_ci TP_ARGS(apic, vector), 58362306a36Sopenharmony_ci 58462306a36Sopenharmony_ci TP_STRUCT__entry( 58562306a36Sopenharmony_ci __field( __u32, apicid ) 58662306a36Sopenharmony_ci __field( int, vector ) 58762306a36Sopenharmony_ci ), 58862306a36Sopenharmony_ci 58962306a36Sopenharmony_ci TP_fast_assign( 59062306a36Sopenharmony_ci __entry->apicid = apic->vcpu->vcpu_id; 59162306a36Sopenharmony_ci __entry->vector = vector; 59262306a36Sopenharmony_ci ), 59362306a36Sopenharmony_ci 59462306a36Sopenharmony_ci TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) 59562306a36Sopenharmony_ci); 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci/* 59862306a36Sopenharmony_ci * Tracepoint for nested VMRUN 59962306a36Sopenharmony_ci */ 60062306a36Sopenharmony_ciTRACE_EVENT(kvm_nested_vmenter, 60162306a36Sopenharmony_ci TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl, 60262306a36Sopenharmony_ci __u32 event_inj, bool tdp_enabled, __u64 guest_tdp_pgd, 60362306a36Sopenharmony_ci __u64 guest_cr3, __u32 isa), 60462306a36Sopenharmony_ci TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, tdp_enabled, 60562306a36Sopenharmony_ci guest_tdp_pgd, guest_cr3, isa), 60662306a36Sopenharmony_ci 60762306a36Sopenharmony_ci TP_STRUCT__entry( 60862306a36Sopenharmony_ci __field( __u64, rip ) 60962306a36Sopenharmony_ci __field( __u64, vmcb ) 61062306a36Sopenharmony_ci __field( __u64, nested_rip ) 61162306a36Sopenharmony_ci __field( __u32, int_ctl ) 61262306a36Sopenharmony_ci __field( __u32, event_inj ) 61362306a36Sopenharmony_ci __field( bool, tdp_enabled ) 61462306a36Sopenharmony_ci __field( __u64, guest_pgd ) 61562306a36Sopenharmony_ci __field( __u32, isa ) 61662306a36Sopenharmony_ci ), 61762306a36Sopenharmony_ci 61862306a36Sopenharmony_ci TP_fast_assign( 61962306a36Sopenharmony_ci __entry->rip = rip; 62062306a36Sopenharmony_ci __entry->vmcb = vmcb; 62162306a36Sopenharmony_ci __entry->nested_rip = nested_rip; 62262306a36Sopenharmony_ci __entry->int_ctl = int_ctl; 62362306a36Sopenharmony_ci __entry->event_inj = event_inj; 62462306a36Sopenharmony_ci __entry->tdp_enabled = tdp_enabled; 62562306a36Sopenharmony_ci __entry->guest_pgd = tdp_enabled ? guest_tdp_pgd : guest_cr3; 62662306a36Sopenharmony_ci __entry->isa = isa; 62762306a36Sopenharmony_ci ), 62862306a36Sopenharmony_ci 62962306a36Sopenharmony_ci TP_printk("rip: 0x%016llx %s: 0x%016llx nested_rip: 0x%016llx " 63062306a36Sopenharmony_ci "int_ctl: 0x%08x event_inj: 0x%08x nested_%s=%s %s: 0x%016llx", 63162306a36Sopenharmony_ci __entry->rip, 63262306a36Sopenharmony_ci __entry->isa == KVM_ISA_VMX ? "vmcs" : "vmcb", 63362306a36Sopenharmony_ci __entry->vmcb, 63462306a36Sopenharmony_ci __entry->nested_rip, 63562306a36Sopenharmony_ci __entry->int_ctl, 63662306a36Sopenharmony_ci __entry->event_inj, 63762306a36Sopenharmony_ci __entry->isa == KVM_ISA_VMX ? "ept" : "npt", 63862306a36Sopenharmony_ci __entry->tdp_enabled ? "y" : "n", 63962306a36Sopenharmony_ci !__entry->tdp_enabled ? "guest_cr3" : 64062306a36Sopenharmony_ci __entry->isa == KVM_ISA_VMX ? "nested_eptp" : "nested_cr3", 64162306a36Sopenharmony_ci __entry->guest_pgd) 64262306a36Sopenharmony_ci); 64362306a36Sopenharmony_ci 64462306a36Sopenharmony_ciTRACE_EVENT(kvm_nested_intercepts, 64562306a36Sopenharmony_ci TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions, 64662306a36Sopenharmony_ci __u32 intercept1, __u32 intercept2, __u32 intercept3), 64762306a36Sopenharmony_ci TP_ARGS(cr_read, cr_write, exceptions, intercept1, 64862306a36Sopenharmony_ci intercept2, intercept3), 64962306a36Sopenharmony_ci 65062306a36Sopenharmony_ci TP_STRUCT__entry( 65162306a36Sopenharmony_ci __field( __u16, cr_read ) 65262306a36Sopenharmony_ci __field( __u16, cr_write ) 65362306a36Sopenharmony_ci __field( __u32, exceptions ) 65462306a36Sopenharmony_ci __field( __u32, intercept1 ) 65562306a36Sopenharmony_ci __field( __u32, intercept2 ) 65662306a36Sopenharmony_ci __field( __u32, intercept3 ) 65762306a36Sopenharmony_ci ), 65862306a36Sopenharmony_ci 65962306a36Sopenharmony_ci TP_fast_assign( 66062306a36Sopenharmony_ci __entry->cr_read = cr_read; 66162306a36Sopenharmony_ci __entry->cr_write = cr_write; 66262306a36Sopenharmony_ci __entry->exceptions = exceptions; 66362306a36Sopenharmony_ci __entry->intercept1 = intercept1; 66462306a36Sopenharmony_ci __entry->intercept2 = intercept2; 66562306a36Sopenharmony_ci __entry->intercept3 = intercept3; 66662306a36Sopenharmony_ci ), 66762306a36Sopenharmony_ci 66862306a36Sopenharmony_ci TP_printk("cr_read: %04x cr_write: %04x excp: %08x " 66962306a36Sopenharmony_ci "intercepts: %08x %08x %08x", 67062306a36Sopenharmony_ci __entry->cr_read, __entry->cr_write, __entry->exceptions, 67162306a36Sopenharmony_ci __entry->intercept1, __entry->intercept2, __entry->intercept3) 67262306a36Sopenharmony_ci); 67362306a36Sopenharmony_ci/* 67462306a36Sopenharmony_ci * Tracepoint for #VMEXIT while nested 67562306a36Sopenharmony_ci */ 67662306a36Sopenharmony_ciTRACE_EVENT_KVM_EXIT(kvm_nested_vmexit); 67762306a36Sopenharmony_ci 67862306a36Sopenharmony_ci/* 67962306a36Sopenharmony_ci * Tracepoint for #VMEXIT reinjected to the guest 68062306a36Sopenharmony_ci */ 68162306a36Sopenharmony_ciTRACE_EVENT(kvm_nested_vmexit_inject, 68262306a36Sopenharmony_ci TP_PROTO(__u32 exit_code, 68362306a36Sopenharmony_ci __u64 exit_info1, __u64 exit_info2, 68462306a36Sopenharmony_ci __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), 68562306a36Sopenharmony_ci TP_ARGS(exit_code, exit_info1, exit_info2, 68662306a36Sopenharmony_ci exit_int_info, exit_int_info_err, isa), 68762306a36Sopenharmony_ci 68862306a36Sopenharmony_ci TP_STRUCT__entry( 68962306a36Sopenharmony_ci __field( __u32, exit_code ) 69062306a36Sopenharmony_ci __field( __u64, exit_info1 ) 69162306a36Sopenharmony_ci __field( __u64, exit_info2 ) 69262306a36Sopenharmony_ci __field( __u32, exit_int_info ) 69362306a36Sopenharmony_ci __field( __u32, exit_int_info_err ) 69462306a36Sopenharmony_ci __field( __u32, isa ) 69562306a36Sopenharmony_ci ), 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_ci TP_fast_assign( 69862306a36Sopenharmony_ci __entry->exit_code = exit_code; 69962306a36Sopenharmony_ci __entry->exit_info1 = exit_info1; 70062306a36Sopenharmony_ci __entry->exit_info2 = exit_info2; 70162306a36Sopenharmony_ci __entry->exit_int_info = exit_int_info; 70262306a36Sopenharmony_ci __entry->exit_int_info_err = exit_int_info_err; 70362306a36Sopenharmony_ci __entry->isa = isa; 70462306a36Sopenharmony_ci ), 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_ci TP_printk("reason: %s%s%s ext_inf1: 0x%016llx " 70762306a36Sopenharmony_ci "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", 70862306a36Sopenharmony_ci kvm_print_exit_reason(__entry->exit_code, __entry->isa), 70962306a36Sopenharmony_ci __entry->exit_info1, __entry->exit_info2, 71062306a36Sopenharmony_ci __entry->exit_int_info, __entry->exit_int_info_err) 71162306a36Sopenharmony_ci); 71262306a36Sopenharmony_ci 71362306a36Sopenharmony_ci/* 71462306a36Sopenharmony_ci * Tracepoint for nested #vmexit because of interrupt pending 71562306a36Sopenharmony_ci */ 71662306a36Sopenharmony_ciTRACE_EVENT(kvm_nested_intr_vmexit, 71762306a36Sopenharmony_ci TP_PROTO(__u64 rip), 71862306a36Sopenharmony_ci TP_ARGS(rip), 71962306a36Sopenharmony_ci 72062306a36Sopenharmony_ci TP_STRUCT__entry( 72162306a36Sopenharmony_ci __field( __u64, rip ) 72262306a36Sopenharmony_ci ), 72362306a36Sopenharmony_ci 72462306a36Sopenharmony_ci TP_fast_assign( 72562306a36Sopenharmony_ci __entry->rip = rip 72662306a36Sopenharmony_ci ), 72762306a36Sopenharmony_ci 72862306a36Sopenharmony_ci TP_printk("rip: 0x%016llx", __entry->rip) 72962306a36Sopenharmony_ci); 73062306a36Sopenharmony_ci 73162306a36Sopenharmony_ci/* 73262306a36Sopenharmony_ci * Tracepoint for nested #vmexit because of interrupt pending 73362306a36Sopenharmony_ci */ 73462306a36Sopenharmony_ciTRACE_EVENT(kvm_invlpga, 73562306a36Sopenharmony_ci TP_PROTO(__u64 rip, int asid, u64 address), 73662306a36Sopenharmony_ci TP_ARGS(rip, asid, address), 73762306a36Sopenharmony_ci 73862306a36Sopenharmony_ci TP_STRUCT__entry( 73962306a36Sopenharmony_ci __field( __u64, rip ) 74062306a36Sopenharmony_ci __field( int, asid ) 74162306a36Sopenharmony_ci __field( __u64, address ) 74262306a36Sopenharmony_ci ), 74362306a36Sopenharmony_ci 74462306a36Sopenharmony_ci TP_fast_assign( 74562306a36Sopenharmony_ci __entry->rip = rip; 74662306a36Sopenharmony_ci __entry->asid = asid; 74762306a36Sopenharmony_ci __entry->address = address; 74862306a36Sopenharmony_ci ), 74962306a36Sopenharmony_ci 75062306a36Sopenharmony_ci TP_printk("rip: 0x%016llx asid: %d address: 0x%016llx", 75162306a36Sopenharmony_ci __entry->rip, __entry->asid, __entry->address) 75262306a36Sopenharmony_ci); 75362306a36Sopenharmony_ci 75462306a36Sopenharmony_ci/* 75562306a36Sopenharmony_ci * Tracepoint for nested #vmexit because of interrupt pending 75662306a36Sopenharmony_ci */ 75762306a36Sopenharmony_ciTRACE_EVENT(kvm_skinit, 75862306a36Sopenharmony_ci TP_PROTO(__u64 rip, __u32 slb), 75962306a36Sopenharmony_ci TP_ARGS(rip, slb), 76062306a36Sopenharmony_ci 76162306a36Sopenharmony_ci TP_STRUCT__entry( 76262306a36Sopenharmony_ci __field( __u64, rip ) 76362306a36Sopenharmony_ci __field( __u32, slb ) 76462306a36Sopenharmony_ci ), 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_ci TP_fast_assign( 76762306a36Sopenharmony_ci __entry->rip = rip; 76862306a36Sopenharmony_ci __entry->slb = slb; 76962306a36Sopenharmony_ci ), 77062306a36Sopenharmony_ci 77162306a36Sopenharmony_ci TP_printk("rip: 0x%016llx slb: 0x%08x", 77262306a36Sopenharmony_ci __entry->rip, __entry->slb) 77362306a36Sopenharmony_ci); 77462306a36Sopenharmony_ci 77562306a36Sopenharmony_ci#define KVM_EMUL_INSN_F_CR0_PE (1 << 0) 77662306a36Sopenharmony_ci#define KVM_EMUL_INSN_F_EFL_VM (1 << 1) 77762306a36Sopenharmony_ci#define KVM_EMUL_INSN_F_CS_D (1 << 2) 77862306a36Sopenharmony_ci#define KVM_EMUL_INSN_F_CS_L (1 << 3) 77962306a36Sopenharmony_ci 78062306a36Sopenharmony_ci#define kvm_trace_symbol_emul_flags \ 78162306a36Sopenharmony_ci { 0, "real" }, \ 78262306a36Sopenharmony_ci { KVM_EMUL_INSN_F_CR0_PE \ 78362306a36Sopenharmony_ci | KVM_EMUL_INSN_F_EFL_VM, "vm16" }, \ 78462306a36Sopenharmony_ci { KVM_EMUL_INSN_F_CR0_PE, "prot16" }, \ 78562306a36Sopenharmony_ci { KVM_EMUL_INSN_F_CR0_PE \ 78662306a36Sopenharmony_ci | KVM_EMUL_INSN_F_CS_D, "prot32" }, \ 78762306a36Sopenharmony_ci { KVM_EMUL_INSN_F_CR0_PE \ 78862306a36Sopenharmony_ci | KVM_EMUL_INSN_F_CS_L, "prot64" } 78962306a36Sopenharmony_ci 79062306a36Sopenharmony_ci#define kei_decode_mode(mode) ({ \ 79162306a36Sopenharmony_ci u8 flags = 0xff; \ 79262306a36Sopenharmony_ci switch (mode) { \ 79362306a36Sopenharmony_ci case X86EMUL_MODE_REAL: \ 79462306a36Sopenharmony_ci flags = 0; \ 79562306a36Sopenharmony_ci break; \ 79662306a36Sopenharmony_ci case X86EMUL_MODE_VM86: \ 79762306a36Sopenharmony_ci flags = KVM_EMUL_INSN_F_EFL_VM; \ 79862306a36Sopenharmony_ci break; \ 79962306a36Sopenharmony_ci case X86EMUL_MODE_PROT16: \ 80062306a36Sopenharmony_ci flags = KVM_EMUL_INSN_F_CR0_PE; \ 80162306a36Sopenharmony_ci break; \ 80262306a36Sopenharmony_ci case X86EMUL_MODE_PROT32: \ 80362306a36Sopenharmony_ci flags = KVM_EMUL_INSN_F_CR0_PE \ 80462306a36Sopenharmony_ci | KVM_EMUL_INSN_F_CS_D; \ 80562306a36Sopenharmony_ci break; \ 80662306a36Sopenharmony_ci case X86EMUL_MODE_PROT64: \ 80762306a36Sopenharmony_ci flags = KVM_EMUL_INSN_F_CR0_PE \ 80862306a36Sopenharmony_ci | KVM_EMUL_INSN_F_CS_L; \ 80962306a36Sopenharmony_ci break; \ 81062306a36Sopenharmony_ci } \ 81162306a36Sopenharmony_ci flags; \ 81262306a36Sopenharmony_ci }) 81362306a36Sopenharmony_ci 81462306a36Sopenharmony_ciTRACE_EVENT(kvm_emulate_insn, 81562306a36Sopenharmony_ci TP_PROTO(struct kvm_vcpu *vcpu, __u8 failed), 81662306a36Sopenharmony_ci TP_ARGS(vcpu, failed), 81762306a36Sopenharmony_ci 81862306a36Sopenharmony_ci TP_STRUCT__entry( 81962306a36Sopenharmony_ci __field( __u64, rip ) 82062306a36Sopenharmony_ci __field( __u32, csbase ) 82162306a36Sopenharmony_ci __field( __u8, len ) 82262306a36Sopenharmony_ci __array( __u8, insn, 15 ) 82362306a36Sopenharmony_ci __field( __u8, flags ) 82462306a36Sopenharmony_ci __field( __u8, failed ) 82562306a36Sopenharmony_ci ), 82662306a36Sopenharmony_ci 82762306a36Sopenharmony_ci TP_fast_assign( 82862306a36Sopenharmony_ci __entry->csbase = static_call(kvm_x86_get_segment_base)(vcpu, VCPU_SREG_CS); 82962306a36Sopenharmony_ci __entry->len = vcpu->arch.emulate_ctxt->fetch.ptr 83062306a36Sopenharmony_ci - vcpu->arch.emulate_ctxt->fetch.data; 83162306a36Sopenharmony_ci __entry->rip = vcpu->arch.emulate_ctxt->_eip - __entry->len; 83262306a36Sopenharmony_ci memcpy(__entry->insn, 83362306a36Sopenharmony_ci vcpu->arch.emulate_ctxt->fetch.data, 83462306a36Sopenharmony_ci 15); 83562306a36Sopenharmony_ci __entry->flags = kei_decode_mode(vcpu->arch.emulate_ctxt->mode); 83662306a36Sopenharmony_ci __entry->failed = failed; 83762306a36Sopenharmony_ci ), 83862306a36Sopenharmony_ci 83962306a36Sopenharmony_ci TP_printk("%x:%llx:%s (%s)%s", 84062306a36Sopenharmony_ci __entry->csbase, __entry->rip, 84162306a36Sopenharmony_ci __print_hex(__entry->insn, __entry->len), 84262306a36Sopenharmony_ci __print_symbolic(__entry->flags, 84362306a36Sopenharmony_ci kvm_trace_symbol_emul_flags), 84462306a36Sopenharmony_ci __entry->failed ? " failed" : "" 84562306a36Sopenharmony_ci ) 84662306a36Sopenharmony_ci ); 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_ci#define trace_kvm_emulate_insn_start(vcpu) trace_kvm_emulate_insn(vcpu, 0) 84962306a36Sopenharmony_ci#define trace_kvm_emulate_insn_failed(vcpu) trace_kvm_emulate_insn(vcpu, 1) 85062306a36Sopenharmony_ci 85162306a36Sopenharmony_ciTRACE_EVENT( 85262306a36Sopenharmony_ci vcpu_match_mmio, 85362306a36Sopenharmony_ci TP_PROTO(gva_t gva, gpa_t gpa, bool write, bool gpa_match), 85462306a36Sopenharmony_ci TP_ARGS(gva, gpa, write, gpa_match), 85562306a36Sopenharmony_ci 85662306a36Sopenharmony_ci TP_STRUCT__entry( 85762306a36Sopenharmony_ci __field(gva_t, gva) 85862306a36Sopenharmony_ci __field(gpa_t, gpa) 85962306a36Sopenharmony_ci __field(bool, write) 86062306a36Sopenharmony_ci __field(bool, gpa_match) 86162306a36Sopenharmony_ci ), 86262306a36Sopenharmony_ci 86362306a36Sopenharmony_ci TP_fast_assign( 86462306a36Sopenharmony_ci __entry->gva = gva; 86562306a36Sopenharmony_ci __entry->gpa = gpa; 86662306a36Sopenharmony_ci __entry->write = write; 86762306a36Sopenharmony_ci __entry->gpa_match = gpa_match 86862306a36Sopenharmony_ci ), 86962306a36Sopenharmony_ci 87062306a36Sopenharmony_ci TP_printk("gva %#lx gpa %#llx %s %s", __entry->gva, __entry->gpa, 87162306a36Sopenharmony_ci __entry->write ? "Write" : "Read", 87262306a36Sopenharmony_ci __entry->gpa_match ? "GPA" : "GVA") 87362306a36Sopenharmony_ci); 87462306a36Sopenharmony_ci 87562306a36Sopenharmony_ciTRACE_EVENT(kvm_write_tsc_offset, 87662306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, __u64 previous_tsc_offset, 87762306a36Sopenharmony_ci __u64 next_tsc_offset), 87862306a36Sopenharmony_ci TP_ARGS(vcpu_id, previous_tsc_offset, next_tsc_offset), 87962306a36Sopenharmony_ci 88062306a36Sopenharmony_ci TP_STRUCT__entry( 88162306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 88262306a36Sopenharmony_ci __field( __u64, previous_tsc_offset ) 88362306a36Sopenharmony_ci __field( __u64, next_tsc_offset ) 88462306a36Sopenharmony_ci ), 88562306a36Sopenharmony_ci 88662306a36Sopenharmony_ci TP_fast_assign( 88762306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 88862306a36Sopenharmony_ci __entry->previous_tsc_offset = previous_tsc_offset; 88962306a36Sopenharmony_ci __entry->next_tsc_offset = next_tsc_offset; 89062306a36Sopenharmony_ci ), 89162306a36Sopenharmony_ci 89262306a36Sopenharmony_ci TP_printk("vcpu=%u prev=%llu next=%llu", __entry->vcpu_id, 89362306a36Sopenharmony_ci __entry->previous_tsc_offset, __entry->next_tsc_offset) 89462306a36Sopenharmony_ci); 89562306a36Sopenharmony_ci 89662306a36Sopenharmony_ci#ifdef CONFIG_X86_64 89762306a36Sopenharmony_ci 89862306a36Sopenharmony_ci#define host_clocks \ 89962306a36Sopenharmony_ci {VDSO_CLOCKMODE_NONE, "none"}, \ 90062306a36Sopenharmony_ci {VDSO_CLOCKMODE_TSC, "tsc"} \ 90162306a36Sopenharmony_ci 90262306a36Sopenharmony_ciTRACE_EVENT(kvm_update_master_clock, 90362306a36Sopenharmony_ci TP_PROTO(bool use_master_clock, unsigned int host_clock, bool offset_matched), 90462306a36Sopenharmony_ci TP_ARGS(use_master_clock, host_clock, offset_matched), 90562306a36Sopenharmony_ci 90662306a36Sopenharmony_ci TP_STRUCT__entry( 90762306a36Sopenharmony_ci __field( bool, use_master_clock ) 90862306a36Sopenharmony_ci __field( unsigned int, host_clock ) 90962306a36Sopenharmony_ci __field( bool, offset_matched ) 91062306a36Sopenharmony_ci ), 91162306a36Sopenharmony_ci 91262306a36Sopenharmony_ci TP_fast_assign( 91362306a36Sopenharmony_ci __entry->use_master_clock = use_master_clock; 91462306a36Sopenharmony_ci __entry->host_clock = host_clock; 91562306a36Sopenharmony_ci __entry->offset_matched = offset_matched; 91662306a36Sopenharmony_ci ), 91762306a36Sopenharmony_ci 91862306a36Sopenharmony_ci TP_printk("masterclock %d hostclock %s offsetmatched %u", 91962306a36Sopenharmony_ci __entry->use_master_clock, 92062306a36Sopenharmony_ci __print_symbolic(__entry->host_clock, host_clocks), 92162306a36Sopenharmony_ci __entry->offset_matched) 92262306a36Sopenharmony_ci); 92362306a36Sopenharmony_ci 92462306a36Sopenharmony_ciTRACE_EVENT(kvm_track_tsc, 92562306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, unsigned int nr_matched, 92662306a36Sopenharmony_ci unsigned int online_vcpus, bool use_master_clock, 92762306a36Sopenharmony_ci unsigned int host_clock), 92862306a36Sopenharmony_ci TP_ARGS(vcpu_id, nr_matched, online_vcpus, use_master_clock, 92962306a36Sopenharmony_ci host_clock), 93062306a36Sopenharmony_ci 93162306a36Sopenharmony_ci TP_STRUCT__entry( 93262306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 93362306a36Sopenharmony_ci __field( unsigned int, nr_vcpus_matched_tsc ) 93462306a36Sopenharmony_ci __field( unsigned int, online_vcpus ) 93562306a36Sopenharmony_ci __field( bool, use_master_clock ) 93662306a36Sopenharmony_ci __field( unsigned int, host_clock ) 93762306a36Sopenharmony_ci ), 93862306a36Sopenharmony_ci 93962306a36Sopenharmony_ci TP_fast_assign( 94062306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 94162306a36Sopenharmony_ci __entry->nr_vcpus_matched_tsc = nr_matched; 94262306a36Sopenharmony_ci __entry->online_vcpus = online_vcpus; 94362306a36Sopenharmony_ci __entry->use_master_clock = use_master_clock; 94462306a36Sopenharmony_ci __entry->host_clock = host_clock; 94562306a36Sopenharmony_ci ), 94662306a36Sopenharmony_ci 94762306a36Sopenharmony_ci TP_printk("vcpu_id %u masterclock %u offsetmatched %u nr_online %u" 94862306a36Sopenharmony_ci " hostclock %s", 94962306a36Sopenharmony_ci __entry->vcpu_id, __entry->use_master_clock, 95062306a36Sopenharmony_ci __entry->nr_vcpus_matched_tsc, __entry->online_vcpus, 95162306a36Sopenharmony_ci __print_symbolic(__entry->host_clock, host_clocks)) 95262306a36Sopenharmony_ci); 95362306a36Sopenharmony_ci 95462306a36Sopenharmony_ci#endif /* CONFIG_X86_64 */ 95562306a36Sopenharmony_ci 95662306a36Sopenharmony_ci/* 95762306a36Sopenharmony_ci * Tracepoint for PML full VMEXIT. 95862306a36Sopenharmony_ci */ 95962306a36Sopenharmony_ciTRACE_EVENT(kvm_pml_full, 96062306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id), 96162306a36Sopenharmony_ci TP_ARGS(vcpu_id), 96262306a36Sopenharmony_ci 96362306a36Sopenharmony_ci TP_STRUCT__entry( 96462306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 96562306a36Sopenharmony_ci ), 96662306a36Sopenharmony_ci 96762306a36Sopenharmony_ci TP_fast_assign( 96862306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 96962306a36Sopenharmony_ci ), 97062306a36Sopenharmony_ci 97162306a36Sopenharmony_ci TP_printk("vcpu %d: PML full", __entry->vcpu_id) 97262306a36Sopenharmony_ci); 97362306a36Sopenharmony_ci 97462306a36Sopenharmony_ciTRACE_EVENT(kvm_ple_window_update, 97562306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, unsigned int new, unsigned int old), 97662306a36Sopenharmony_ci TP_ARGS(vcpu_id, new, old), 97762306a36Sopenharmony_ci 97862306a36Sopenharmony_ci TP_STRUCT__entry( 97962306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 98062306a36Sopenharmony_ci __field( unsigned int, new ) 98162306a36Sopenharmony_ci __field( unsigned int, old ) 98262306a36Sopenharmony_ci ), 98362306a36Sopenharmony_ci 98462306a36Sopenharmony_ci TP_fast_assign( 98562306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 98662306a36Sopenharmony_ci __entry->new = new; 98762306a36Sopenharmony_ci __entry->old = old; 98862306a36Sopenharmony_ci ), 98962306a36Sopenharmony_ci 99062306a36Sopenharmony_ci TP_printk("vcpu %u old %u new %u (%s)", 99162306a36Sopenharmony_ci __entry->vcpu_id, __entry->old, __entry->new, 99262306a36Sopenharmony_ci __entry->old < __entry->new ? "growed" : "shrinked") 99362306a36Sopenharmony_ci); 99462306a36Sopenharmony_ci 99562306a36Sopenharmony_ciTRACE_EVENT(kvm_pvclock_update, 99662306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, struct pvclock_vcpu_time_info *pvclock), 99762306a36Sopenharmony_ci TP_ARGS(vcpu_id, pvclock), 99862306a36Sopenharmony_ci 99962306a36Sopenharmony_ci TP_STRUCT__entry( 100062306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 100162306a36Sopenharmony_ci __field( __u32, version ) 100262306a36Sopenharmony_ci __field( __u64, tsc_timestamp ) 100362306a36Sopenharmony_ci __field( __u64, system_time ) 100462306a36Sopenharmony_ci __field( __u32, tsc_to_system_mul ) 100562306a36Sopenharmony_ci __field( __s8, tsc_shift ) 100662306a36Sopenharmony_ci __field( __u8, flags ) 100762306a36Sopenharmony_ci ), 100862306a36Sopenharmony_ci 100962306a36Sopenharmony_ci TP_fast_assign( 101062306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 101162306a36Sopenharmony_ci __entry->version = pvclock->version; 101262306a36Sopenharmony_ci __entry->tsc_timestamp = pvclock->tsc_timestamp; 101362306a36Sopenharmony_ci __entry->system_time = pvclock->system_time; 101462306a36Sopenharmony_ci __entry->tsc_to_system_mul = pvclock->tsc_to_system_mul; 101562306a36Sopenharmony_ci __entry->tsc_shift = pvclock->tsc_shift; 101662306a36Sopenharmony_ci __entry->flags = pvclock->flags; 101762306a36Sopenharmony_ci ), 101862306a36Sopenharmony_ci 101962306a36Sopenharmony_ci TP_printk("vcpu_id %u, pvclock { version %u, tsc_timestamp 0x%llx, " 102062306a36Sopenharmony_ci "system_time 0x%llx, tsc_to_system_mul 0x%x, tsc_shift %d, " 102162306a36Sopenharmony_ci "flags 0x%x }", 102262306a36Sopenharmony_ci __entry->vcpu_id, 102362306a36Sopenharmony_ci __entry->version, 102462306a36Sopenharmony_ci __entry->tsc_timestamp, 102562306a36Sopenharmony_ci __entry->system_time, 102662306a36Sopenharmony_ci __entry->tsc_to_system_mul, 102762306a36Sopenharmony_ci __entry->tsc_shift, 102862306a36Sopenharmony_ci __entry->flags) 102962306a36Sopenharmony_ci); 103062306a36Sopenharmony_ci 103162306a36Sopenharmony_ciTRACE_EVENT(kvm_wait_lapic_expire, 103262306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, s64 delta), 103362306a36Sopenharmony_ci TP_ARGS(vcpu_id, delta), 103462306a36Sopenharmony_ci 103562306a36Sopenharmony_ci TP_STRUCT__entry( 103662306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 103762306a36Sopenharmony_ci __field( s64, delta ) 103862306a36Sopenharmony_ci ), 103962306a36Sopenharmony_ci 104062306a36Sopenharmony_ci TP_fast_assign( 104162306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 104262306a36Sopenharmony_ci __entry->delta = delta; 104362306a36Sopenharmony_ci ), 104462306a36Sopenharmony_ci 104562306a36Sopenharmony_ci TP_printk("vcpu %u: delta %lld (%s)", 104662306a36Sopenharmony_ci __entry->vcpu_id, 104762306a36Sopenharmony_ci __entry->delta, 104862306a36Sopenharmony_ci __entry->delta < 0 ? "early" : "late") 104962306a36Sopenharmony_ci); 105062306a36Sopenharmony_ci 105162306a36Sopenharmony_ciTRACE_EVENT(kvm_smm_transition, 105262306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, u64 smbase, bool entering), 105362306a36Sopenharmony_ci TP_ARGS(vcpu_id, smbase, entering), 105462306a36Sopenharmony_ci 105562306a36Sopenharmony_ci TP_STRUCT__entry( 105662306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 105762306a36Sopenharmony_ci __field( u64, smbase ) 105862306a36Sopenharmony_ci __field( bool, entering ) 105962306a36Sopenharmony_ci ), 106062306a36Sopenharmony_ci 106162306a36Sopenharmony_ci TP_fast_assign( 106262306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 106362306a36Sopenharmony_ci __entry->smbase = smbase; 106462306a36Sopenharmony_ci __entry->entering = entering; 106562306a36Sopenharmony_ci ), 106662306a36Sopenharmony_ci 106762306a36Sopenharmony_ci TP_printk("vcpu %u: %s SMM, smbase 0x%llx", 106862306a36Sopenharmony_ci __entry->vcpu_id, 106962306a36Sopenharmony_ci __entry->entering ? "entering" : "leaving", 107062306a36Sopenharmony_ci __entry->smbase) 107162306a36Sopenharmony_ci); 107262306a36Sopenharmony_ci 107362306a36Sopenharmony_ci/* 107462306a36Sopenharmony_ci * Tracepoint for VT-d posted-interrupts. 107562306a36Sopenharmony_ci */ 107662306a36Sopenharmony_ciTRACE_EVENT(kvm_pi_irte_update, 107762306a36Sopenharmony_ci TP_PROTO(unsigned int host_irq, unsigned int vcpu_id, 107862306a36Sopenharmony_ci unsigned int gsi, unsigned int gvec, 107962306a36Sopenharmony_ci u64 pi_desc_addr, bool set), 108062306a36Sopenharmony_ci TP_ARGS(host_irq, vcpu_id, gsi, gvec, pi_desc_addr, set), 108162306a36Sopenharmony_ci 108262306a36Sopenharmony_ci TP_STRUCT__entry( 108362306a36Sopenharmony_ci __field( unsigned int, host_irq ) 108462306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 108562306a36Sopenharmony_ci __field( unsigned int, gsi ) 108662306a36Sopenharmony_ci __field( unsigned int, gvec ) 108762306a36Sopenharmony_ci __field( u64, pi_desc_addr ) 108862306a36Sopenharmony_ci __field( bool, set ) 108962306a36Sopenharmony_ci ), 109062306a36Sopenharmony_ci 109162306a36Sopenharmony_ci TP_fast_assign( 109262306a36Sopenharmony_ci __entry->host_irq = host_irq; 109362306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 109462306a36Sopenharmony_ci __entry->gsi = gsi; 109562306a36Sopenharmony_ci __entry->gvec = gvec; 109662306a36Sopenharmony_ci __entry->pi_desc_addr = pi_desc_addr; 109762306a36Sopenharmony_ci __entry->set = set; 109862306a36Sopenharmony_ci ), 109962306a36Sopenharmony_ci 110062306a36Sopenharmony_ci TP_printk("VT-d PI is %s for irq %u, vcpu %u, gsi: 0x%x, " 110162306a36Sopenharmony_ci "gvec: 0x%x, pi_desc_addr: 0x%llx", 110262306a36Sopenharmony_ci __entry->set ? "enabled and being updated" : "disabled", 110362306a36Sopenharmony_ci __entry->host_irq, 110462306a36Sopenharmony_ci __entry->vcpu_id, 110562306a36Sopenharmony_ci __entry->gsi, 110662306a36Sopenharmony_ci __entry->gvec, 110762306a36Sopenharmony_ci __entry->pi_desc_addr) 110862306a36Sopenharmony_ci); 110962306a36Sopenharmony_ci 111062306a36Sopenharmony_ci/* 111162306a36Sopenharmony_ci * Tracepoint for kvm_hv_notify_acked_sint. 111262306a36Sopenharmony_ci */ 111362306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_notify_acked_sint, 111462306a36Sopenharmony_ci TP_PROTO(int vcpu_id, u32 sint), 111562306a36Sopenharmony_ci TP_ARGS(vcpu_id, sint), 111662306a36Sopenharmony_ci 111762306a36Sopenharmony_ci TP_STRUCT__entry( 111862306a36Sopenharmony_ci __field(int, vcpu_id) 111962306a36Sopenharmony_ci __field(u32, sint) 112062306a36Sopenharmony_ci ), 112162306a36Sopenharmony_ci 112262306a36Sopenharmony_ci TP_fast_assign( 112362306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 112462306a36Sopenharmony_ci __entry->sint = sint; 112562306a36Sopenharmony_ci ), 112662306a36Sopenharmony_ci 112762306a36Sopenharmony_ci TP_printk("vcpu_id %d sint %u", __entry->vcpu_id, __entry->sint) 112862306a36Sopenharmony_ci); 112962306a36Sopenharmony_ci 113062306a36Sopenharmony_ci/* 113162306a36Sopenharmony_ci * Tracepoint for synic_set_irq. 113262306a36Sopenharmony_ci */ 113362306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_synic_set_irq, 113462306a36Sopenharmony_ci TP_PROTO(int vcpu_id, u32 sint, int vector, int ret), 113562306a36Sopenharmony_ci TP_ARGS(vcpu_id, sint, vector, ret), 113662306a36Sopenharmony_ci 113762306a36Sopenharmony_ci TP_STRUCT__entry( 113862306a36Sopenharmony_ci __field(int, vcpu_id) 113962306a36Sopenharmony_ci __field(u32, sint) 114062306a36Sopenharmony_ci __field(int, vector) 114162306a36Sopenharmony_ci __field(int, ret) 114262306a36Sopenharmony_ci ), 114362306a36Sopenharmony_ci 114462306a36Sopenharmony_ci TP_fast_assign( 114562306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 114662306a36Sopenharmony_ci __entry->sint = sint; 114762306a36Sopenharmony_ci __entry->vector = vector; 114862306a36Sopenharmony_ci __entry->ret = ret; 114962306a36Sopenharmony_ci ), 115062306a36Sopenharmony_ci 115162306a36Sopenharmony_ci TP_printk("vcpu_id %d sint %u vector %d ret %d", 115262306a36Sopenharmony_ci __entry->vcpu_id, __entry->sint, __entry->vector, 115362306a36Sopenharmony_ci __entry->ret) 115462306a36Sopenharmony_ci); 115562306a36Sopenharmony_ci 115662306a36Sopenharmony_ci/* 115762306a36Sopenharmony_ci * Tracepoint for kvm_hv_synic_send_eoi. 115862306a36Sopenharmony_ci */ 115962306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_synic_send_eoi, 116062306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int vector), 116162306a36Sopenharmony_ci TP_ARGS(vcpu_id, vector), 116262306a36Sopenharmony_ci 116362306a36Sopenharmony_ci TP_STRUCT__entry( 116462306a36Sopenharmony_ci __field(int, vcpu_id) 116562306a36Sopenharmony_ci __field(u32, sint) 116662306a36Sopenharmony_ci __field(int, vector) 116762306a36Sopenharmony_ci __field(int, ret) 116862306a36Sopenharmony_ci ), 116962306a36Sopenharmony_ci 117062306a36Sopenharmony_ci TP_fast_assign( 117162306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 117262306a36Sopenharmony_ci __entry->vector = vector; 117362306a36Sopenharmony_ci ), 117462306a36Sopenharmony_ci 117562306a36Sopenharmony_ci TP_printk("vcpu_id %d vector %d", __entry->vcpu_id, __entry->vector) 117662306a36Sopenharmony_ci); 117762306a36Sopenharmony_ci 117862306a36Sopenharmony_ci/* 117962306a36Sopenharmony_ci * Tracepoint for synic_set_msr. 118062306a36Sopenharmony_ci */ 118162306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_synic_set_msr, 118262306a36Sopenharmony_ci TP_PROTO(int vcpu_id, u32 msr, u64 data, bool host), 118362306a36Sopenharmony_ci TP_ARGS(vcpu_id, msr, data, host), 118462306a36Sopenharmony_ci 118562306a36Sopenharmony_ci TP_STRUCT__entry( 118662306a36Sopenharmony_ci __field(int, vcpu_id) 118762306a36Sopenharmony_ci __field(u32, msr) 118862306a36Sopenharmony_ci __field(u64, data) 118962306a36Sopenharmony_ci __field(bool, host) 119062306a36Sopenharmony_ci ), 119162306a36Sopenharmony_ci 119262306a36Sopenharmony_ci TP_fast_assign( 119362306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 119462306a36Sopenharmony_ci __entry->msr = msr; 119562306a36Sopenharmony_ci __entry->data = data; 119662306a36Sopenharmony_ci __entry->host = host 119762306a36Sopenharmony_ci ), 119862306a36Sopenharmony_ci 119962306a36Sopenharmony_ci TP_printk("vcpu_id %d msr 0x%x data 0x%llx host %d", 120062306a36Sopenharmony_ci __entry->vcpu_id, __entry->msr, __entry->data, __entry->host) 120162306a36Sopenharmony_ci); 120262306a36Sopenharmony_ci 120362306a36Sopenharmony_ci/* 120462306a36Sopenharmony_ci * Tracepoint for stimer_set_config. 120562306a36Sopenharmony_ci */ 120662306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_stimer_set_config, 120762306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int timer_index, u64 config, bool host), 120862306a36Sopenharmony_ci TP_ARGS(vcpu_id, timer_index, config, host), 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_ci TP_STRUCT__entry( 121162306a36Sopenharmony_ci __field(int, vcpu_id) 121262306a36Sopenharmony_ci __field(int, timer_index) 121362306a36Sopenharmony_ci __field(u64, config) 121462306a36Sopenharmony_ci __field(bool, host) 121562306a36Sopenharmony_ci ), 121662306a36Sopenharmony_ci 121762306a36Sopenharmony_ci TP_fast_assign( 121862306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 121962306a36Sopenharmony_ci __entry->timer_index = timer_index; 122062306a36Sopenharmony_ci __entry->config = config; 122162306a36Sopenharmony_ci __entry->host = host; 122262306a36Sopenharmony_ci ), 122362306a36Sopenharmony_ci 122462306a36Sopenharmony_ci TP_printk("vcpu_id %d timer %d config 0x%llx host %d", 122562306a36Sopenharmony_ci __entry->vcpu_id, __entry->timer_index, __entry->config, 122662306a36Sopenharmony_ci __entry->host) 122762306a36Sopenharmony_ci); 122862306a36Sopenharmony_ci 122962306a36Sopenharmony_ci/* 123062306a36Sopenharmony_ci * Tracepoint for stimer_set_count. 123162306a36Sopenharmony_ci */ 123262306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_stimer_set_count, 123362306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int timer_index, u64 count, bool host), 123462306a36Sopenharmony_ci TP_ARGS(vcpu_id, timer_index, count, host), 123562306a36Sopenharmony_ci 123662306a36Sopenharmony_ci TP_STRUCT__entry( 123762306a36Sopenharmony_ci __field(int, vcpu_id) 123862306a36Sopenharmony_ci __field(int, timer_index) 123962306a36Sopenharmony_ci __field(u64, count) 124062306a36Sopenharmony_ci __field(bool, host) 124162306a36Sopenharmony_ci ), 124262306a36Sopenharmony_ci 124362306a36Sopenharmony_ci TP_fast_assign( 124462306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 124562306a36Sopenharmony_ci __entry->timer_index = timer_index; 124662306a36Sopenharmony_ci __entry->count = count; 124762306a36Sopenharmony_ci __entry->host = host; 124862306a36Sopenharmony_ci ), 124962306a36Sopenharmony_ci 125062306a36Sopenharmony_ci TP_printk("vcpu_id %d timer %d count %llu host %d", 125162306a36Sopenharmony_ci __entry->vcpu_id, __entry->timer_index, __entry->count, 125262306a36Sopenharmony_ci __entry->host) 125362306a36Sopenharmony_ci); 125462306a36Sopenharmony_ci 125562306a36Sopenharmony_ci/* 125662306a36Sopenharmony_ci * Tracepoint for stimer_start(periodic timer case). 125762306a36Sopenharmony_ci */ 125862306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_stimer_start_periodic, 125962306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int timer_index, u64 time_now, u64 exp_time), 126062306a36Sopenharmony_ci TP_ARGS(vcpu_id, timer_index, time_now, exp_time), 126162306a36Sopenharmony_ci 126262306a36Sopenharmony_ci TP_STRUCT__entry( 126362306a36Sopenharmony_ci __field(int, vcpu_id) 126462306a36Sopenharmony_ci __field(int, timer_index) 126562306a36Sopenharmony_ci __field(u64, time_now) 126662306a36Sopenharmony_ci __field(u64, exp_time) 126762306a36Sopenharmony_ci ), 126862306a36Sopenharmony_ci 126962306a36Sopenharmony_ci TP_fast_assign( 127062306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 127162306a36Sopenharmony_ci __entry->timer_index = timer_index; 127262306a36Sopenharmony_ci __entry->time_now = time_now; 127362306a36Sopenharmony_ci __entry->exp_time = exp_time; 127462306a36Sopenharmony_ci ), 127562306a36Sopenharmony_ci 127662306a36Sopenharmony_ci TP_printk("vcpu_id %d timer %d time_now %llu exp_time %llu", 127762306a36Sopenharmony_ci __entry->vcpu_id, __entry->timer_index, __entry->time_now, 127862306a36Sopenharmony_ci __entry->exp_time) 127962306a36Sopenharmony_ci); 128062306a36Sopenharmony_ci 128162306a36Sopenharmony_ci/* 128262306a36Sopenharmony_ci * Tracepoint for stimer_start(one-shot timer case). 128362306a36Sopenharmony_ci */ 128462306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_stimer_start_one_shot, 128562306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int timer_index, u64 time_now, u64 count), 128662306a36Sopenharmony_ci TP_ARGS(vcpu_id, timer_index, time_now, count), 128762306a36Sopenharmony_ci 128862306a36Sopenharmony_ci TP_STRUCT__entry( 128962306a36Sopenharmony_ci __field(int, vcpu_id) 129062306a36Sopenharmony_ci __field(int, timer_index) 129162306a36Sopenharmony_ci __field(u64, time_now) 129262306a36Sopenharmony_ci __field(u64, count) 129362306a36Sopenharmony_ci ), 129462306a36Sopenharmony_ci 129562306a36Sopenharmony_ci TP_fast_assign( 129662306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 129762306a36Sopenharmony_ci __entry->timer_index = timer_index; 129862306a36Sopenharmony_ci __entry->time_now = time_now; 129962306a36Sopenharmony_ci __entry->count = count; 130062306a36Sopenharmony_ci ), 130162306a36Sopenharmony_ci 130262306a36Sopenharmony_ci TP_printk("vcpu_id %d timer %d time_now %llu count %llu", 130362306a36Sopenharmony_ci __entry->vcpu_id, __entry->timer_index, __entry->time_now, 130462306a36Sopenharmony_ci __entry->count) 130562306a36Sopenharmony_ci); 130662306a36Sopenharmony_ci 130762306a36Sopenharmony_ci/* 130862306a36Sopenharmony_ci * Tracepoint for stimer_timer_callback. 130962306a36Sopenharmony_ci */ 131062306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_stimer_callback, 131162306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int timer_index), 131262306a36Sopenharmony_ci TP_ARGS(vcpu_id, timer_index), 131362306a36Sopenharmony_ci 131462306a36Sopenharmony_ci TP_STRUCT__entry( 131562306a36Sopenharmony_ci __field(int, vcpu_id) 131662306a36Sopenharmony_ci __field(int, timer_index) 131762306a36Sopenharmony_ci ), 131862306a36Sopenharmony_ci 131962306a36Sopenharmony_ci TP_fast_assign( 132062306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 132162306a36Sopenharmony_ci __entry->timer_index = timer_index; 132262306a36Sopenharmony_ci ), 132362306a36Sopenharmony_ci 132462306a36Sopenharmony_ci TP_printk("vcpu_id %d timer %d", 132562306a36Sopenharmony_ci __entry->vcpu_id, __entry->timer_index) 132662306a36Sopenharmony_ci); 132762306a36Sopenharmony_ci 132862306a36Sopenharmony_ci/* 132962306a36Sopenharmony_ci * Tracepoint for stimer_expiration. 133062306a36Sopenharmony_ci */ 133162306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_stimer_expiration, 133262306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int timer_index, int direct, int msg_send_result), 133362306a36Sopenharmony_ci TP_ARGS(vcpu_id, timer_index, direct, msg_send_result), 133462306a36Sopenharmony_ci 133562306a36Sopenharmony_ci TP_STRUCT__entry( 133662306a36Sopenharmony_ci __field(int, vcpu_id) 133762306a36Sopenharmony_ci __field(int, timer_index) 133862306a36Sopenharmony_ci __field(int, direct) 133962306a36Sopenharmony_ci __field(int, msg_send_result) 134062306a36Sopenharmony_ci ), 134162306a36Sopenharmony_ci 134262306a36Sopenharmony_ci TP_fast_assign( 134362306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 134462306a36Sopenharmony_ci __entry->timer_index = timer_index; 134562306a36Sopenharmony_ci __entry->direct = direct; 134662306a36Sopenharmony_ci __entry->msg_send_result = msg_send_result; 134762306a36Sopenharmony_ci ), 134862306a36Sopenharmony_ci 134962306a36Sopenharmony_ci TP_printk("vcpu_id %d timer %d direct %d send result %d", 135062306a36Sopenharmony_ci __entry->vcpu_id, __entry->timer_index, 135162306a36Sopenharmony_ci __entry->direct, __entry->msg_send_result) 135262306a36Sopenharmony_ci); 135362306a36Sopenharmony_ci 135462306a36Sopenharmony_ci/* 135562306a36Sopenharmony_ci * Tracepoint for stimer_cleanup. 135662306a36Sopenharmony_ci */ 135762306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_stimer_cleanup, 135862306a36Sopenharmony_ci TP_PROTO(int vcpu_id, int timer_index), 135962306a36Sopenharmony_ci TP_ARGS(vcpu_id, timer_index), 136062306a36Sopenharmony_ci 136162306a36Sopenharmony_ci TP_STRUCT__entry( 136262306a36Sopenharmony_ci __field(int, vcpu_id) 136362306a36Sopenharmony_ci __field(int, timer_index) 136462306a36Sopenharmony_ci ), 136562306a36Sopenharmony_ci 136662306a36Sopenharmony_ci TP_fast_assign( 136762306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 136862306a36Sopenharmony_ci __entry->timer_index = timer_index; 136962306a36Sopenharmony_ci ), 137062306a36Sopenharmony_ci 137162306a36Sopenharmony_ci TP_printk("vcpu_id %d timer %d", 137262306a36Sopenharmony_ci __entry->vcpu_id, __entry->timer_index) 137362306a36Sopenharmony_ci); 137462306a36Sopenharmony_ci 137562306a36Sopenharmony_ciTRACE_EVENT(kvm_apicv_inhibit_changed, 137662306a36Sopenharmony_ci TP_PROTO(int reason, bool set, unsigned long inhibits), 137762306a36Sopenharmony_ci TP_ARGS(reason, set, inhibits), 137862306a36Sopenharmony_ci 137962306a36Sopenharmony_ci TP_STRUCT__entry( 138062306a36Sopenharmony_ci __field(int, reason) 138162306a36Sopenharmony_ci __field(bool, set) 138262306a36Sopenharmony_ci __field(unsigned long, inhibits) 138362306a36Sopenharmony_ci ), 138462306a36Sopenharmony_ci 138562306a36Sopenharmony_ci TP_fast_assign( 138662306a36Sopenharmony_ci __entry->reason = reason; 138762306a36Sopenharmony_ci __entry->set = set; 138862306a36Sopenharmony_ci __entry->inhibits = inhibits; 138962306a36Sopenharmony_ci ), 139062306a36Sopenharmony_ci 139162306a36Sopenharmony_ci TP_printk("%s reason=%u, inhibits=0x%lx", 139262306a36Sopenharmony_ci __entry->set ? "set" : "cleared", 139362306a36Sopenharmony_ci __entry->reason, __entry->inhibits) 139462306a36Sopenharmony_ci); 139562306a36Sopenharmony_ci 139662306a36Sopenharmony_ciTRACE_EVENT(kvm_apicv_accept_irq, 139762306a36Sopenharmony_ci TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec), 139862306a36Sopenharmony_ci TP_ARGS(apicid, dm, tm, vec), 139962306a36Sopenharmony_ci 140062306a36Sopenharmony_ci TP_STRUCT__entry( 140162306a36Sopenharmony_ci __field( __u32, apicid ) 140262306a36Sopenharmony_ci __field( __u16, dm ) 140362306a36Sopenharmony_ci __field( __u16, tm ) 140462306a36Sopenharmony_ci __field( __u8, vec ) 140562306a36Sopenharmony_ci ), 140662306a36Sopenharmony_ci 140762306a36Sopenharmony_ci TP_fast_assign( 140862306a36Sopenharmony_ci __entry->apicid = apicid; 140962306a36Sopenharmony_ci __entry->dm = dm; 141062306a36Sopenharmony_ci __entry->tm = tm; 141162306a36Sopenharmony_ci __entry->vec = vec; 141262306a36Sopenharmony_ci ), 141362306a36Sopenharmony_ci 141462306a36Sopenharmony_ci TP_printk("apicid %x vec %u (%s|%s)", 141562306a36Sopenharmony_ci __entry->apicid, __entry->vec, 141662306a36Sopenharmony_ci __print_symbolic((__entry->dm >> 8 & 0x7), kvm_deliver_mode), 141762306a36Sopenharmony_ci __entry->tm ? "level" : "edge") 141862306a36Sopenharmony_ci); 141962306a36Sopenharmony_ci 142062306a36Sopenharmony_ci/* 142162306a36Sopenharmony_ci * Tracepoint for AMD AVIC 142262306a36Sopenharmony_ci */ 142362306a36Sopenharmony_ciTRACE_EVENT(kvm_avic_incomplete_ipi, 142462306a36Sopenharmony_ci TP_PROTO(u32 vcpu, u32 icrh, u32 icrl, u32 id, u32 index), 142562306a36Sopenharmony_ci TP_ARGS(vcpu, icrh, icrl, id, index), 142662306a36Sopenharmony_ci 142762306a36Sopenharmony_ci TP_STRUCT__entry( 142862306a36Sopenharmony_ci __field(u32, vcpu) 142962306a36Sopenharmony_ci __field(u32, icrh) 143062306a36Sopenharmony_ci __field(u32, icrl) 143162306a36Sopenharmony_ci __field(u32, id) 143262306a36Sopenharmony_ci __field(u32, index) 143362306a36Sopenharmony_ci ), 143462306a36Sopenharmony_ci 143562306a36Sopenharmony_ci TP_fast_assign( 143662306a36Sopenharmony_ci __entry->vcpu = vcpu; 143762306a36Sopenharmony_ci __entry->icrh = icrh; 143862306a36Sopenharmony_ci __entry->icrl = icrl; 143962306a36Sopenharmony_ci __entry->id = id; 144062306a36Sopenharmony_ci __entry->index = index; 144162306a36Sopenharmony_ci ), 144262306a36Sopenharmony_ci 144362306a36Sopenharmony_ci TP_printk("vcpu=%u, icrh:icrl=%#010x:%08x, id=%u, index=%u", 144462306a36Sopenharmony_ci __entry->vcpu, __entry->icrh, __entry->icrl, 144562306a36Sopenharmony_ci __entry->id, __entry->index) 144662306a36Sopenharmony_ci); 144762306a36Sopenharmony_ci 144862306a36Sopenharmony_ciTRACE_EVENT(kvm_avic_unaccelerated_access, 144962306a36Sopenharmony_ci TP_PROTO(u32 vcpu, u32 offset, bool ft, bool rw, u32 vec), 145062306a36Sopenharmony_ci TP_ARGS(vcpu, offset, ft, rw, vec), 145162306a36Sopenharmony_ci 145262306a36Sopenharmony_ci TP_STRUCT__entry( 145362306a36Sopenharmony_ci __field(u32, vcpu) 145462306a36Sopenharmony_ci __field(u32, offset) 145562306a36Sopenharmony_ci __field(bool, ft) 145662306a36Sopenharmony_ci __field(bool, rw) 145762306a36Sopenharmony_ci __field(u32, vec) 145862306a36Sopenharmony_ci ), 145962306a36Sopenharmony_ci 146062306a36Sopenharmony_ci TP_fast_assign( 146162306a36Sopenharmony_ci __entry->vcpu = vcpu; 146262306a36Sopenharmony_ci __entry->offset = offset; 146362306a36Sopenharmony_ci __entry->ft = ft; 146462306a36Sopenharmony_ci __entry->rw = rw; 146562306a36Sopenharmony_ci __entry->vec = vec; 146662306a36Sopenharmony_ci ), 146762306a36Sopenharmony_ci 146862306a36Sopenharmony_ci TP_printk("vcpu=%u, offset=%#x(%s), %s, %s, vec=%#x", 146962306a36Sopenharmony_ci __entry->vcpu, 147062306a36Sopenharmony_ci __entry->offset, 147162306a36Sopenharmony_ci __print_symbolic(__entry->offset, kvm_trace_symbol_apic), 147262306a36Sopenharmony_ci __entry->ft ? "trap" : "fault", 147362306a36Sopenharmony_ci __entry->rw ? "write" : "read", 147462306a36Sopenharmony_ci __entry->vec) 147562306a36Sopenharmony_ci); 147662306a36Sopenharmony_ci 147762306a36Sopenharmony_ciTRACE_EVENT(kvm_avic_ga_log, 147862306a36Sopenharmony_ci TP_PROTO(u32 vmid, u32 vcpuid), 147962306a36Sopenharmony_ci TP_ARGS(vmid, vcpuid), 148062306a36Sopenharmony_ci 148162306a36Sopenharmony_ci TP_STRUCT__entry( 148262306a36Sopenharmony_ci __field(u32, vmid) 148362306a36Sopenharmony_ci __field(u32, vcpuid) 148462306a36Sopenharmony_ci ), 148562306a36Sopenharmony_ci 148662306a36Sopenharmony_ci TP_fast_assign( 148762306a36Sopenharmony_ci __entry->vmid = vmid; 148862306a36Sopenharmony_ci __entry->vcpuid = vcpuid; 148962306a36Sopenharmony_ci ), 149062306a36Sopenharmony_ci 149162306a36Sopenharmony_ci TP_printk("vmid=%u, vcpuid=%u", 149262306a36Sopenharmony_ci __entry->vmid, __entry->vcpuid) 149362306a36Sopenharmony_ci); 149462306a36Sopenharmony_ci 149562306a36Sopenharmony_ciTRACE_EVENT(kvm_avic_kick_vcpu_slowpath, 149662306a36Sopenharmony_ci TP_PROTO(u32 icrh, u32 icrl, u32 index), 149762306a36Sopenharmony_ci TP_ARGS(icrh, icrl, index), 149862306a36Sopenharmony_ci 149962306a36Sopenharmony_ci TP_STRUCT__entry( 150062306a36Sopenharmony_ci __field(u32, icrh) 150162306a36Sopenharmony_ci __field(u32, icrl) 150262306a36Sopenharmony_ci __field(u32, index) 150362306a36Sopenharmony_ci ), 150462306a36Sopenharmony_ci 150562306a36Sopenharmony_ci TP_fast_assign( 150662306a36Sopenharmony_ci __entry->icrh = icrh; 150762306a36Sopenharmony_ci __entry->icrl = icrl; 150862306a36Sopenharmony_ci __entry->index = index; 150962306a36Sopenharmony_ci ), 151062306a36Sopenharmony_ci 151162306a36Sopenharmony_ci TP_printk("icrh:icrl=%#08x:%08x, index=%u", 151262306a36Sopenharmony_ci __entry->icrh, __entry->icrl, __entry->index) 151362306a36Sopenharmony_ci); 151462306a36Sopenharmony_ci 151562306a36Sopenharmony_ciTRACE_EVENT(kvm_avic_doorbell, 151662306a36Sopenharmony_ci TP_PROTO(u32 vcpuid, u32 apicid), 151762306a36Sopenharmony_ci TP_ARGS(vcpuid, apicid), 151862306a36Sopenharmony_ci 151962306a36Sopenharmony_ci TP_STRUCT__entry( 152062306a36Sopenharmony_ci __field(u32, vcpuid) 152162306a36Sopenharmony_ci __field(u32, apicid) 152262306a36Sopenharmony_ci ), 152362306a36Sopenharmony_ci 152462306a36Sopenharmony_ci TP_fast_assign( 152562306a36Sopenharmony_ci __entry->vcpuid = vcpuid; 152662306a36Sopenharmony_ci __entry->apicid = apicid; 152762306a36Sopenharmony_ci ), 152862306a36Sopenharmony_ci 152962306a36Sopenharmony_ci TP_printk("vcpuid=%u, apicid=%u", 153062306a36Sopenharmony_ci __entry->vcpuid, __entry->apicid) 153162306a36Sopenharmony_ci); 153262306a36Sopenharmony_ci 153362306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_timer_state, 153462306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, unsigned int hv_timer_in_use), 153562306a36Sopenharmony_ci TP_ARGS(vcpu_id, hv_timer_in_use), 153662306a36Sopenharmony_ci TP_STRUCT__entry( 153762306a36Sopenharmony_ci __field(unsigned int, vcpu_id) 153862306a36Sopenharmony_ci __field(unsigned int, hv_timer_in_use) 153962306a36Sopenharmony_ci ), 154062306a36Sopenharmony_ci TP_fast_assign( 154162306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 154262306a36Sopenharmony_ci __entry->hv_timer_in_use = hv_timer_in_use; 154362306a36Sopenharmony_ci ), 154462306a36Sopenharmony_ci TP_printk("vcpu_id %x hv_timer %x", 154562306a36Sopenharmony_ci __entry->vcpu_id, 154662306a36Sopenharmony_ci __entry->hv_timer_in_use) 154762306a36Sopenharmony_ci); 154862306a36Sopenharmony_ci 154962306a36Sopenharmony_ci/* 155062306a36Sopenharmony_ci * Tracepoint for kvm_hv_flush_tlb. 155162306a36Sopenharmony_ci */ 155262306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_flush_tlb, 155362306a36Sopenharmony_ci TP_PROTO(u64 processor_mask, u64 address_space, u64 flags, bool guest_mode), 155462306a36Sopenharmony_ci TP_ARGS(processor_mask, address_space, flags, guest_mode), 155562306a36Sopenharmony_ci 155662306a36Sopenharmony_ci TP_STRUCT__entry( 155762306a36Sopenharmony_ci __field(u64, processor_mask) 155862306a36Sopenharmony_ci __field(u64, address_space) 155962306a36Sopenharmony_ci __field(u64, flags) 156062306a36Sopenharmony_ci __field(bool, guest_mode) 156162306a36Sopenharmony_ci ), 156262306a36Sopenharmony_ci 156362306a36Sopenharmony_ci TP_fast_assign( 156462306a36Sopenharmony_ci __entry->processor_mask = processor_mask; 156562306a36Sopenharmony_ci __entry->address_space = address_space; 156662306a36Sopenharmony_ci __entry->flags = flags; 156762306a36Sopenharmony_ci __entry->guest_mode = guest_mode; 156862306a36Sopenharmony_ci ), 156962306a36Sopenharmony_ci 157062306a36Sopenharmony_ci TP_printk("processor_mask 0x%llx address_space 0x%llx flags 0x%llx %s", 157162306a36Sopenharmony_ci __entry->processor_mask, __entry->address_space, 157262306a36Sopenharmony_ci __entry->flags, __entry->guest_mode ? "(L2)" : "") 157362306a36Sopenharmony_ci); 157462306a36Sopenharmony_ci 157562306a36Sopenharmony_ci/* 157662306a36Sopenharmony_ci * Tracepoint for kvm_hv_flush_tlb_ex. 157762306a36Sopenharmony_ci */ 157862306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_flush_tlb_ex, 157962306a36Sopenharmony_ci TP_PROTO(u64 valid_bank_mask, u64 format, u64 address_space, u64 flags, bool guest_mode), 158062306a36Sopenharmony_ci TP_ARGS(valid_bank_mask, format, address_space, flags, guest_mode), 158162306a36Sopenharmony_ci 158262306a36Sopenharmony_ci TP_STRUCT__entry( 158362306a36Sopenharmony_ci __field(u64, valid_bank_mask) 158462306a36Sopenharmony_ci __field(u64, format) 158562306a36Sopenharmony_ci __field(u64, address_space) 158662306a36Sopenharmony_ci __field(u64, flags) 158762306a36Sopenharmony_ci __field(bool, guest_mode) 158862306a36Sopenharmony_ci ), 158962306a36Sopenharmony_ci 159062306a36Sopenharmony_ci TP_fast_assign( 159162306a36Sopenharmony_ci __entry->valid_bank_mask = valid_bank_mask; 159262306a36Sopenharmony_ci __entry->format = format; 159362306a36Sopenharmony_ci __entry->address_space = address_space; 159462306a36Sopenharmony_ci __entry->flags = flags; 159562306a36Sopenharmony_ci __entry->guest_mode = guest_mode; 159662306a36Sopenharmony_ci ), 159762306a36Sopenharmony_ci 159862306a36Sopenharmony_ci TP_printk("valid_bank_mask 0x%llx format 0x%llx " 159962306a36Sopenharmony_ci "address_space 0x%llx flags 0x%llx %s", 160062306a36Sopenharmony_ci __entry->valid_bank_mask, __entry->format, 160162306a36Sopenharmony_ci __entry->address_space, __entry->flags, 160262306a36Sopenharmony_ci __entry->guest_mode ? "(L2)" : "") 160362306a36Sopenharmony_ci); 160462306a36Sopenharmony_ci 160562306a36Sopenharmony_ci/* 160662306a36Sopenharmony_ci * Tracepoints for kvm_hv_send_ipi. 160762306a36Sopenharmony_ci */ 160862306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_send_ipi, 160962306a36Sopenharmony_ci TP_PROTO(u32 vector, u64 processor_mask), 161062306a36Sopenharmony_ci TP_ARGS(vector, processor_mask), 161162306a36Sopenharmony_ci 161262306a36Sopenharmony_ci TP_STRUCT__entry( 161362306a36Sopenharmony_ci __field(u32, vector) 161462306a36Sopenharmony_ci __field(u64, processor_mask) 161562306a36Sopenharmony_ci ), 161662306a36Sopenharmony_ci 161762306a36Sopenharmony_ci TP_fast_assign( 161862306a36Sopenharmony_ci __entry->vector = vector; 161962306a36Sopenharmony_ci __entry->processor_mask = processor_mask; 162062306a36Sopenharmony_ci ), 162162306a36Sopenharmony_ci 162262306a36Sopenharmony_ci TP_printk("vector %x processor_mask 0x%llx", 162362306a36Sopenharmony_ci __entry->vector, __entry->processor_mask) 162462306a36Sopenharmony_ci); 162562306a36Sopenharmony_ci 162662306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_send_ipi_ex, 162762306a36Sopenharmony_ci TP_PROTO(u32 vector, u64 format, u64 valid_bank_mask), 162862306a36Sopenharmony_ci TP_ARGS(vector, format, valid_bank_mask), 162962306a36Sopenharmony_ci 163062306a36Sopenharmony_ci TP_STRUCT__entry( 163162306a36Sopenharmony_ci __field(u32, vector) 163262306a36Sopenharmony_ci __field(u64, format) 163362306a36Sopenharmony_ci __field(u64, valid_bank_mask) 163462306a36Sopenharmony_ci ), 163562306a36Sopenharmony_ci 163662306a36Sopenharmony_ci TP_fast_assign( 163762306a36Sopenharmony_ci __entry->vector = vector; 163862306a36Sopenharmony_ci __entry->format = format; 163962306a36Sopenharmony_ci __entry->valid_bank_mask = valid_bank_mask; 164062306a36Sopenharmony_ci ), 164162306a36Sopenharmony_ci 164262306a36Sopenharmony_ci TP_printk("vector %x format %llx valid_bank_mask 0x%llx", 164362306a36Sopenharmony_ci __entry->vector, __entry->format, 164462306a36Sopenharmony_ci __entry->valid_bank_mask) 164562306a36Sopenharmony_ci); 164662306a36Sopenharmony_ci 164762306a36Sopenharmony_ciTRACE_EVENT(kvm_pv_tlb_flush, 164862306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, bool need_flush_tlb), 164962306a36Sopenharmony_ci TP_ARGS(vcpu_id, need_flush_tlb), 165062306a36Sopenharmony_ci 165162306a36Sopenharmony_ci TP_STRUCT__entry( 165262306a36Sopenharmony_ci __field( unsigned int, vcpu_id ) 165362306a36Sopenharmony_ci __field( bool, need_flush_tlb ) 165462306a36Sopenharmony_ci ), 165562306a36Sopenharmony_ci 165662306a36Sopenharmony_ci TP_fast_assign( 165762306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 165862306a36Sopenharmony_ci __entry->need_flush_tlb = need_flush_tlb; 165962306a36Sopenharmony_ci ), 166062306a36Sopenharmony_ci 166162306a36Sopenharmony_ci TP_printk("vcpu %u need_flush_tlb %s", __entry->vcpu_id, 166262306a36Sopenharmony_ci __entry->need_flush_tlb ? "true" : "false") 166362306a36Sopenharmony_ci); 166462306a36Sopenharmony_ci 166562306a36Sopenharmony_ci/* 166662306a36Sopenharmony_ci * Tracepoint for failed nested VMX VM-Enter. 166762306a36Sopenharmony_ci */ 166862306a36Sopenharmony_ciTRACE_EVENT(kvm_nested_vmenter_failed, 166962306a36Sopenharmony_ci TP_PROTO(const char *msg, u32 err), 167062306a36Sopenharmony_ci TP_ARGS(msg, err), 167162306a36Sopenharmony_ci 167262306a36Sopenharmony_ci TP_STRUCT__entry( 167362306a36Sopenharmony_ci __string(msg, msg) 167462306a36Sopenharmony_ci __field(u32, err) 167562306a36Sopenharmony_ci ), 167662306a36Sopenharmony_ci 167762306a36Sopenharmony_ci TP_fast_assign( 167862306a36Sopenharmony_ci __assign_str(msg, msg); 167962306a36Sopenharmony_ci __entry->err = err; 168062306a36Sopenharmony_ci ), 168162306a36Sopenharmony_ci 168262306a36Sopenharmony_ci TP_printk("%s%s", __get_str(msg), !__entry->err ? "" : 168362306a36Sopenharmony_ci __print_symbolic(__entry->err, VMX_VMENTER_INSTRUCTION_ERRORS)) 168462306a36Sopenharmony_ci); 168562306a36Sopenharmony_ci 168662306a36Sopenharmony_ci/* 168762306a36Sopenharmony_ci * Tracepoint for syndbg_set_msr. 168862306a36Sopenharmony_ci */ 168962306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_syndbg_set_msr, 169062306a36Sopenharmony_ci TP_PROTO(int vcpu_id, u32 vp_index, u32 msr, u64 data), 169162306a36Sopenharmony_ci TP_ARGS(vcpu_id, vp_index, msr, data), 169262306a36Sopenharmony_ci 169362306a36Sopenharmony_ci TP_STRUCT__entry( 169462306a36Sopenharmony_ci __field(int, vcpu_id) 169562306a36Sopenharmony_ci __field(u32, vp_index) 169662306a36Sopenharmony_ci __field(u32, msr) 169762306a36Sopenharmony_ci __field(u64, data) 169862306a36Sopenharmony_ci ), 169962306a36Sopenharmony_ci 170062306a36Sopenharmony_ci TP_fast_assign( 170162306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 170262306a36Sopenharmony_ci __entry->vp_index = vp_index; 170362306a36Sopenharmony_ci __entry->msr = msr; 170462306a36Sopenharmony_ci __entry->data = data; 170562306a36Sopenharmony_ci ), 170662306a36Sopenharmony_ci 170762306a36Sopenharmony_ci TP_printk("vcpu_id %d vp_index %u msr 0x%x data 0x%llx", 170862306a36Sopenharmony_ci __entry->vcpu_id, __entry->vp_index, __entry->msr, 170962306a36Sopenharmony_ci __entry->data) 171062306a36Sopenharmony_ci); 171162306a36Sopenharmony_ci 171262306a36Sopenharmony_ci/* 171362306a36Sopenharmony_ci * Tracepoint for syndbg_get_msr. 171462306a36Sopenharmony_ci */ 171562306a36Sopenharmony_ciTRACE_EVENT(kvm_hv_syndbg_get_msr, 171662306a36Sopenharmony_ci TP_PROTO(int vcpu_id, u32 vp_index, u32 msr, u64 data), 171762306a36Sopenharmony_ci TP_ARGS(vcpu_id, vp_index, msr, data), 171862306a36Sopenharmony_ci 171962306a36Sopenharmony_ci TP_STRUCT__entry( 172062306a36Sopenharmony_ci __field(int, vcpu_id) 172162306a36Sopenharmony_ci __field(u32, vp_index) 172262306a36Sopenharmony_ci __field(u32, msr) 172362306a36Sopenharmony_ci __field(u64, data) 172462306a36Sopenharmony_ci ), 172562306a36Sopenharmony_ci 172662306a36Sopenharmony_ci TP_fast_assign( 172762306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 172862306a36Sopenharmony_ci __entry->vp_index = vp_index; 172962306a36Sopenharmony_ci __entry->msr = msr; 173062306a36Sopenharmony_ci __entry->data = data; 173162306a36Sopenharmony_ci ), 173262306a36Sopenharmony_ci 173362306a36Sopenharmony_ci TP_printk("vcpu_id %d vp_index %u msr 0x%x data 0x%llx", 173462306a36Sopenharmony_ci __entry->vcpu_id, __entry->vp_index, __entry->msr, 173562306a36Sopenharmony_ci __entry->data) 173662306a36Sopenharmony_ci); 173762306a36Sopenharmony_ci 173862306a36Sopenharmony_ci/* 173962306a36Sopenharmony_ci * Tracepoint for the start of VMGEXIT processing 174062306a36Sopenharmony_ci */ 174162306a36Sopenharmony_ciTRACE_EVENT(kvm_vmgexit_enter, 174262306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 174362306a36Sopenharmony_ci TP_ARGS(vcpu_id, ghcb), 174462306a36Sopenharmony_ci 174562306a36Sopenharmony_ci TP_STRUCT__entry( 174662306a36Sopenharmony_ci __field(unsigned int, vcpu_id) 174762306a36Sopenharmony_ci __field(u64, exit_reason) 174862306a36Sopenharmony_ci __field(u64, info1) 174962306a36Sopenharmony_ci __field(u64, info2) 175062306a36Sopenharmony_ci ), 175162306a36Sopenharmony_ci 175262306a36Sopenharmony_ci TP_fast_assign( 175362306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 175462306a36Sopenharmony_ci __entry->exit_reason = ghcb->save.sw_exit_code; 175562306a36Sopenharmony_ci __entry->info1 = ghcb->save.sw_exit_info_1; 175662306a36Sopenharmony_ci __entry->info2 = ghcb->save.sw_exit_info_2; 175762306a36Sopenharmony_ci ), 175862306a36Sopenharmony_ci 175962306a36Sopenharmony_ci TP_printk("vcpu %u, exit_reason %llx, exit_info1 %llx, exit_info2 %llx", 176062306a36Sopenharmony_ci __entry->vcpu_id, __entry->exit_reason, 176162306a36Sopenharmony_ci __entry->info1, __entry->info2) 176262306a36Sopenharmony_ci); 176362306a36Sopenharmony_ci 176462306a36Sopenharmony_ci/* 176562306a36Sopenharmony_ci * Tracepoint for the end of VMGEXIT processing 176662306a36Sopenharmony_ci */ 176762306a36Sopenharmony_ciTRACE_EVENT(kvm_vmgexit_exit, 176862306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 176962306a36Sopenharmony_ci TP_ARGS(vcpu_id, ghcb), 177062306a36Sopenharmony_ci 177162306a36Sopenharmony_ci TP_STRUCT__entry( 177262306a36Sopenharmony_ci __field(unsigned int, vcpu_id) 177362306a36Sopenharmony_ci __field(u64, exit_reason) 177462306a36Sopenharmony_ci __field(u64, info1) 177562306a36Sopenharmony_ci __field(u64, info2) 177662306a36Sopenharmony_ci ), 177762306a36Sopenharmony_ci 177862306a36Sopenharmony_ci TP_fast_assign( 177962306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 178062306a36Sopenharmony_ci __entry->exit_reason = ghcb->save.sw_exit_code; 178162306a36Sopenharmony_ci __entry->info1 = ghcb->save.sw_exit_info_1; 178262306a36Sopenharmony_ci __entry->info2 = ghcb->save.sw_exit_info_2; 178362306a36Sopenharmony_ci ), 178462306a36Sopenharmony_ci 178562306a36Sopenharmony_ci TP_printk("vcpu %u, exit_reason %llx, exit_info1 %llx, exit_info2 %llx", 178662306a36Sopenharmony_ci __entry->vcpu_id, __entry->exit_reason, 178762306a36Sopenharmony_ci __entry->info1, __entry->info2) 178862306a36Sopenharmony_ci); 178962306a36Sopenharmony_ci 179062306a36Sopenharmony_ci/* 179162306a36Sopenharmony_ci * Tracepoint for the start of VMGEXIT MSR procotol processing 179262306a36Sopenharmony_ci */ 179362306a36Sopenharmony_ciTRACE_EVENT(kvm_vmgexit_msr_protocol_enter, 179462306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, u64 ghcb_gpa), 179562306a36Sopenharmony_ci TP_ARGS(vcpu_id, ghcb_gpa), 179662306a36Sopenharmony_ci 179762306a36Sopenharmony_ci TP_STRUCT__entry( 179862306a36Sopenharmony_ci __field(unsigned int, vcpu_id) 179962306a36Sopenharmony_ci __field(u64, ghcb_gpa) 180062306a36Sopenharmony_ci ), 180162306a36Sopenharmony_ci 180262306a36Sopenharmony_ci TP_fast_assign( 180362306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 180462306a36Sopenharmony_ci __entry->ghcb_gpa = ghcb_gpa; 180562306a36Sopenharmony_ci ), 180662306a36Sopenharmony_ci 180762306a36Sopenharmony_ci TP_printk("vcpu %u, ghcb_gpa %016llx", 180862306a36Sopenharmony_ci __entry->vcpu_id, __entry->ghcb_gpa) 180962306a36Sopenharmony_ci); 181062306a36Sopenharmony_ci 181162306a36Sopenharmony_ci/* 181262306a36Sopenharmony_ci * Tracepoint for the end of VMGEXIT MSR procotol processing 181362306a36Sopenharmony_ci */ 181462306a36Sopenharmony_ciTRACE_EVENT(kvm_vmgexit_msr_protocol_exit, 181562306a36Sopenharmony_ci TP_PROTO(unsigned int vcpu_id, u64 ghcb_gpa, int result), 181662306a36Sopenharmony_ci TP_ARGS(vcpu_id, ghcb_gpa, result), 181762306a36Sopenharmony_ci 181862306a36Sopenharmony_ci TP_STRUCT__entry( 181962306a36Sopenharmony_ci __field(unsigned int, vcpu_id) 182062306a36Sopenharmony_ci __field(u64, ghcb_gpa) 182162306a36Sopenharmony_ci __field(int, result) 182262306a36Sopenharmony_ci ), 182362306a36Sopenharmony_ci 182462306a36Sopenharmony_ci TP_fast_assign( 182562306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 182662306a36Sopenharmony_ci __entry->ghcb_gpa = ghcb_gpa; 182762306a36Sopenharmony_ci __entry->result = result; 182862306a36Sopenharmony_ci ), 182962306a36Sopenharmony_ci 183062306a36Sopenharmony_ci TP_printk("vcpu %u, ghcb_gpa %016llx, result %d", 183162306a36Sopenharmony_ci __entry->vcpu_id, __entry->ghcb_gpa, __entry->result) 183262306a36Sopenharmony_ci); 183362306a36Sopenharmony_ci 183462306a36Sopenharmony_ci#endif /* _TRACE_KVM_H */ 183562306a36Sopenharmony_ci 183662306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 183762306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH ../../arch/x86/kvm 183862306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE 183962306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace 184062306a36Sopenharmony_ci 184162306a36Sopenharmony_ci/* This part must be outside protection */ 184262306a36Sopenharmony_ci#include <trace/define_trace.h> 1843