1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2229456fcSMarcelo Tosatti #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) 3229456fcSMarcelo Tosatti #define _TRACE_KVM_H 4229456fcSMarcelo Tosatti 5229456fcSMarcelo Tosatti #include <linux/tracepoint.h> 60d460ffcSStefan Hajnoczi #include <asm/vmx.h> 70d460ffcSStefan Hajnoczi #include <asm/svm.h> 8d828199eSMarcelo Tosatti #include <asm/clocksource.h> 9ce1a5e60SDavid Matlack #include <asm/pvclock-abi.h> 10229456fcSMarcelo Tosatti 11229456fcSMarcelo Tosatti #undef TRACE_SYSTEM 12229456fcSMarcelo Tosatti #define TRACE_SYSTEM kvm 13229456fcSMarcelo Tosatti 14229456fcSMarcelo Tosatti /* 15229456fcSMarcelo Tosatti * Tracepoint for guest mode entry. 16229456fcSMarcelo Tosatti */ 17229456fcSMarcelo Tosatti TRACE_EVENT(kvm_entry, 18b2d52255SSean Christopherson TP_PROTO(struct kvm_vcpu *vcpu), 19b2d52255SSean Christopherson TP_ARGS(vcpu), 20229456fcSMarcelo Tosatti 21229456fcSMarcelo Tosatti TP_STRUCT__entry( 22229456fcSMarcelo Tosatti __field( unsigned int, vcpu_id ) 23b2d52255SSean Christopherson __field( unsigned long, rip ) 24229456fcSMarcelo Tosatti ), 25229456fcSMarcelo Tosatti 26229456fcSMarcelo Tosatti TP_fast_assign( 27b2d52255SSean Christopherson __entry->vcpu_id = vcpu->vcpu_id; 28b2d52255SSean Christopherson __entry->rip = kvm_rip_read(vcpu); 29229456fcSMarcelo Tosatti ), 30229456fcSMarcelo Tosatti 31b2d52255SSean Christopherson TP_printk("vcpu %u, rip 0x%lx", __entry->vcpu_id, __entry->rip) 32229456fcSMarcelo Tosatti ); 33229456fcSMarcelo Tosatti 34229456fcSMarcelo Tosatti /* 35229456fcSMarcelo Tosatti * Tracepoint for hypercall. 36229456fcSMarcelo Tosatti */ 37229456fcSMarcelo Tosatti TRACE_EVENT(kvm_hypercall, 38229456fcSMarcelo Tosatti TP_PROTO(unsigned long nr, unsigned long a0, unsigned long a1, 39229456fcSMarcelo Tosatti unsigned long a2, unsigned long a3), 40229456fcSMarcelo Tosatti TP_ARGS(nr, a0, a1, a2, a3), 41229456fcSMarcelo Tosatti 42229456fcSMarcelo Tosatti TP_STRUCT__entry( 43229456fcSMarcelo Tosatti __field( unsigned long, nr ) 44229456fcSMarcelo Tosatti __field( unsigned long, a0 ) 45229456fcSMarcelo Tosatti __field( unsigned long, a1 ) 46229456fcSMarcelo Tosatti __field( unsigned long, a2 ) 47229456fcSMarcelo Tosatti __field( unsigned long, a3 ) 48229456fcSMarcelo Tosatti ), 49229456fcSMarcelo Tosatti 50229456fcSMarcelo Tosatti TP_fast_assign( 51229456fcSMarcelo Tosatti __entry->nr = nr; 52229456fcSMarcelo Tosatti __entry->a0 = a0; 53229456fcSMarcelo Tosatti __entry->a1 = a1; 54229456fcSMarcelo Tosatti __entry->a2 = a2; 55229456fcSMarcelo Tosatti __entry->a3 = a3; 56229456fcSMarcelo Tosatti ), 57229456fcSMarcelo Tosatti 58229456fcSMarcelo Tosatti TP_printk("nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx", 59229456fcSMarcelo Tosatti __entry->nr, __entry->a0, __entry->a1, __entry->a2, 60229456fcSMarcelo Tosatti __entry->a3) 61229456fcSMarcelo Tosatti ); 62229456fcSMarcelo Tosatti 63229456fcSMarcelo Tosatti /* 6455cd8e5aSGleb Natapov * Tracepoint for hypercall. 6555cd8e5aSGleb Natapov */ 6655cd8e5aSGleb Natapov TRACE_EVENT(kvm_hv_hypercall, 67bd1ba573SSean Christopherson TP_PROTO(__u16 code, bool fast, __u16 var_cnt, __u16 rep_cnt, 68bd1ba573SSean Christopherson __u16 rep_idx, __u64 ingpa, __u64 outgpa), 69bd1ba573SSean Christopherson TP_ARGS(code, fast, var_cnt, rep_cnt, rep_idx, ingpa, outgpa), 7055cd8e5aSGleb Natapov 7155cd8e5aSGleb Natapov TP_STRUCT__entry( 7255cd8e5aSGleb Natapov __field( __u16, rep_cnt ) 7355cd8e5aSGleb Natapov __field( __u16, rep_idx ) 7455cd8e5aSGleb Natapov __field( __u64, ingpa ) 7555cd8e5aSGleb Natapov __field( __u64, outgpa ) 76d5bf2ff0SDavid Sharp __field( __u16, code ) 77bd1ba573SSean Christopherson __field( __u16, var_cnt ) 78d5bf2ff0SDavid Sharp __field( bool, fast ) 7955cd8e5aSGleb Natapov ), 8055cd8e5aSGleb Natapov 8155cd8e5aSGleb Natapov TP_fast_assign( 8255cd8e5aSGleb Natapov __entry->rep_cnt = rep_cnt; 8355cd8e5aSGleb Natapov __entry->rep_idx = rep_idx; 8455cd8e5aSGleb Natapov __entry->ingpa = ingpa; 8555cd8e5aSGleb Natapov __entry->outgpa = outgpa; 86d5bf2ff0SDavid Sharp __entry->code = code; 87bd1ba573SSean Christopherson __entry->var_cnt = var_cnt; 88d5bf2ff0SDavid Sharp __entry->fast = fast; 8955cd8e5aSGleb Natapov ), 9055cd8e5aSGleb Natapov 91bd1ba573SSean Christopherson TP_printk("code 0x%x %s var_cnt 0x%x rep_cnt 0x%x idx 0x%x in 0x%llx out 0x%llx", 9255cd8e5aSGleb Natapov __entry->code, __entry->fast ? "fast" : "slow", 93bd1ba573SSean Christopherson __entry->var_cnt, __entry->rep_cnt, __entry->rep_idx, 94bd1ba573SSean Christopherson __entry->ingpa, __entry->outgpa) 9555cd8e5aSGleb Natapov ); 9655cd8e5aSGleb Natapov 97f5714bbbSVitaly Kuznetsov TRACE_EVENT(kvm_hv_hypercall_done, 98f5714bbbSVitaly Kuznetsov TP_PROTO(u64 result), 99f5714bbbSVitaly Kuznetsov TP_ARGS(result), 100f5714bbbSVitaly Kuznetsov 101f5714bbbSVitaly Kuznetsov TP_STRUCT__entry( 102f5714bbbSVitaly Kuznetsov __field(__u64, result) 103f5714bbbSVitaly Kuznetsov ), 104f5714bbbSVitaly Kuznetsov 105f5714bbbSVitaly Kuznetsov TP_fast_assign( 106f5714bbbSVitaly Kuznetsov __entry->result = result; 107f5714bbbSVitaly Kuznetsov ), 108f5714bbbSVitaly Kuznetsov 109f5714bbbSVitaly Kuznetsov TP_printk("result 0x%llx", __entry->result) 110f5714bbbSVitaly Kuznetsov ); 111f5714bbbSVitaly Kuznetsov 11255cd8e5aSGleb Natapov /* 11323200b7aSJoao Martins * Tracepoint for Xen hypercall. 11423200b7aSJoao Martins */ 11523200b7aSJoao Martins TRACE_EVENT(kvm_xen_hypercall, 116c3f37199SDavid Woodhouse TP_PROTO(u8 cpl, unsigned long nr, 117c3f37199SDavid Woodhouse unsigned long a0, unsigned long a1, unsigned long a2, 118c3f37199SDavid Woodhouse unsigned long a3, unsigned long a4, unsigned long a5), 119c3f37199SDavid Woodhouse TP_ARGS(cpl, nr, a0, a1, a2, a3, a4, a5), 12023200b7aSJoao Martins 12123200b7aSJoao Martins TP_STRUCT__entry( 122c3f37199SDavid Woodhouse __field(u8, cpl) 12323200b7aSJoao Martins __field(unsigned long, nr) 12423200b7aSJoao Martins __field(unsigned long, a0) 12523200b7aSJoao Martins __field(unsigned long, a1) 12623200b7aSJoao Martins __field(unsigned long, a2) 12723200b7aSJoao Martins __field(unsigned long, a3) 12823200b7aSJoao Martins __field(unsigned long, a4) 12923200b7aSJoao Martins __field(unsigned long, a5) 13023200b7aSJoao Martins ), 13123200b7aSJoao Martins 13223200b7aSJoao Martins TP_fast_assign( 133c3f37199SDavid Woodhouse __entry->cpl = cpl; 13423200b7aSJoao Martins __entry->nr = nr; 13523200b7aSJoao Martins __entry->a0 = a0; 13623200b7aSJoao Martins __entry->a1 = a1; 13723200b7aSJoao Martins __entry->a2 = a2; 13823200b7aSJoao Martins __entry->a3 = a3; 13923200b7aSJoao Martins __entry->a4 = a4; 14023200b7aSJoao Martins __entry->a4 = a5; 14123200b7aSJoao Martins ), 14223200b7aSJoao Martins 143c3f37199SDavid Woodhouse TP_printk("cpl %d nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx a4 0x%lx a5 %lx", 144c3f37199SDavid Woodhouse __entry->cpl, __entry->nr, 145c3f37199SDavid Woodhouse __entry->a0, __entry->a1, __entry->a2, 14623200b7aSJoao Martins __entry->a3, __entry->a4, __entry->a5) 14723200b7aSJoao Martins ); 14823200b7aSJoao Martins 14923200b7aSJoao Martins 15023200b7aSJoao Martins 15123200b7aSJoao Martins /* 152229456fcSMarcelo Tosatti * Tracepoint for PIO. 153229456fcSMarcelo Tosatti */ 1541171903dSUlrich Obergfell 1551171903dSUlrich Obergfell #define KVM_PIO_IN 0 1561171903dSUlrich Obergfell #define KVM_PIO_OUT 1 1571171903dSUlrich Obergfell 158229456fcSMarcelo Tosatti TRACE_EVENT(kvm_pio, 159229456fcSMarcelo Tosatti TP_PROTO(unsigned int rw, unsigned int port, unsigned int size, 16030d583fdSPaolo Bonzini unsigned int count, const void *data), 1611171903dSUlrich Obergfell TP_ARGS(rw, port, size, count, data), 162229456fcSMarcelo Tosatti 163229456fcSMarcelo Tosatti TP_STRUCT__entry( 164229456fcSMarcelo Tosatti __field( unsigned int, rw ) 165229456fcSMarcelo Tosatti __field( unsigned int, port ) 166229456fcSMarcelo Tosatti __field( unsigned int, size ) 167229456fcSMarcelo Tosatti __field( unsigned int, count ) 1681171903dSUlrich Obergfell __field( unsigned int, val ) 169229456fcSMarcelo Tosatti ), 170229456fcSMarcelo Tosatti 171229456fcSMarcelo Tosatti TP_fast_assign( 172229456fcSMarcelo Tosatti __entry->rw = rw; 173229456fcSMarcelo Tosatti __entry->port = port; 174229456fcSMarcelo Tosatti __entry->size = size; 175229456fcSMarcelo Tosatti __entry->count = count; 1761171903dSUlrich Obergfell if (size == 1) 1771171903dSUlrich Obergfell __entry->val = *(unsigned char *)data; 1781171903dSUlrich Obergfell else if (size == 2) 1791171903dSUlrich Obergfell __entry->val = *(unsigned short *)data; 1801171903dSUlrich Obergfell else 1811171903dSUlrich Obergfell __entry->val = *(unsigned int *)data; 182229456fcSMarcelo Tosatti ), 183229456fcSMarcelo Tosatti 1841171903dSUlrich Obergfell TP_printk("pio_%s at 0x%x size %d count %d val 0x%x %s", 185229456fcSMarcelo Tosatti __entry->rw ? "write" : "read", 1861171903dSUlrich Obergfell __entry->port, __entry->size, __entry->count, __entry->val, 1871171903dSUlrich Obergfell __entry->count > 1 ? "(...)" : "") 188229456fcSMarcelo Tosatti ); 189229456fcSMarcelo Tosatti 190229456fcSMarcelo Tosatti /* 191931c33b1SJason Wang * Tracepoint for fast mmio. 192931c33b1SJason Wang */ 193931c33b1SJason Wang TRACE_EVENT(kvm_fast_mmio, 194931c33b1SJason Wang TP_PROTO(u64 gpa), 195931c33b1SJason Wang TP_ARGS(gpa), 196931c33b1SJason Wang 197931c33b1SJason Wang TP_STRUCT__entry( 198931c33b1SJason Wang __field(u64, gpa) 199931c33b1SJason Wang ), 200931c33b1SJason Wang 201931c33b1SJason Wang TP_fast_assign( 202931c33b1SJason Wang __entry->gpa = gpa; 203931c33b1SJason Wang ), 204931c33b1SJason Wang 205931c33b1SJason Wang TP_printk("fast mmio at gpa 0x%llx", __entry->gpa) 206931c33b1SJason Wang ); 207931c33b1SJason Wang 208931c33b1SJason Wang /* 209229456fcSMarcelo Tosatti * Tracepoint for cpuid. 210229456fcSMarcelo Tosatti */ 211229456fcSMarcelo Tosatti TRACE_EVENT(kvm_cpuid, 212e7adda28SSean Christopherson TP_PROTO(unsigned int function, unsigned int index, unsigned long rax, 213e7adda28SSean Christopherson unsigned long rbx, unsigned long rcx, unsigned long rdx, 2142b110b61SSean Christopherson bool found, bool used_max_basic), 2152b110b61SSean Christopherson TP_ARGS(function, index, rax, rbx, rcx, rdx, found, used_max_basic), 216229456fcSMarcelo Tosatti 217229456fcSMarcelo Tosatti TP_STRUCT__entry( 218229456fcSMarcelo Tosatti __field( unsigned int, function ) 219e7adda28SSean Christopherson __field( unsigned int, index ) 220229456fcSMarcelo Tosatti __field( unsigned long, rax ) 221229456fcSMarcelo Tosatti __field( unsigned long, rbx ) 222229456fcSMarcelo Tosatti __field( unsigned long, rcx ) 223229456fcSMarcelo Tosatti __field( unsigned long, rdx ) 224e911eb3bSYu Zhang __field( bool, found ) 2252b110b61SSean Christopherson __field( bool, used_max_basic ) 226229456fcSMarcelo Tosatti ), 227229456fcSMarcelo Tosatti 228229456fcSMarcelo Tosatti TP_fast_assign( 229229456fcSMarcelo Tosatti __entry->function = function; 230e7adda28SSean Christopherson __entry->index = index; 231229456fcSMarcelo Tosatti __entry->rax = rax; 232229456fcSMarcelo Tosatti __entry->rbx = rbx; 233229456fcSMarcelo Tosatti __entry->rcx = rcx; 234229456fcSMarcelo Tosatti __entry->rdx = rdx; 235e911eb3bSYu Zhang __entry->found = found; 2362b110b61SSean Christopherson __entry->used_max_basic = used_max_basic; 237229456fcSMarcelo Tosatti ), 238229456fcSMarcelo Tosatti 2392b110b61SSean Christopherson TP_printk("func %x idx %x rax %lx rbx %lx rcx %lx rdx %lx, cpuid entry %s%s", 240e7adda28SSean Christopherson __entry->function, __entry->index, __entry->rax, 241e911eb3bSYu Zhang __entry->rbx, __entry->rcx, __entry->rdx, 2422b110b61SSean Christopherson __entry->found ? "found" : "not found", 2432b110b61SSean Christopherson __entry->used_max_basic ? ", used max basic" : "") 244229456fcSMarcelo Tosatti ); 245229456fcSMarcelo Tosatti 246cb247721SAvi Kivity #define AREG(x) { APIC_##x, "APIC_" #x } 247cb247721SAvi Kivity 248cb247721SAvi Kivity #define kvm_trace_symbol_apic \ 249cb247721SAvi Kivity AREG(ID), AREG(LVR), AREG(TASKPRI), AREG(ARBPRI), AREG(PROCPRI), \ 250cb247721SAvi Kivity AREG(EOI), AREG(RRR), AREG(LDR), AREG(DFR), AREG(SPIV), AREG(ISR), \ 251cb247721SAvi Kivity AREG(TMR), AREG(IRR), AREG(ESR), AREG(ICR), AREG(ICR2), AREG(LVTT), \ 252cb247721SAvi Kivity AREG(LVTTHMR), AREG(LVTPC), AREG(LVT0), AREG(LVT1), AREG(LVTERR), \ 253cb247721SAvi Kivity AREG(TMICT), AREG(TMCCT), AREG(TDCR), AREG(SELF_IPI), AREG(EFEAT), \ 254cb247721SAvi Kivity AREG(ECTRL) 255229456fcSMarcelo Tosatti /* 256229456fcSMarcelo Tosatti * Tracepoint for apic access. 257229456fcSMarcelo Tosatti */ 258229456fcSMarcelo Tosatti TRACE_EVENT(kvm_apic, 259b9964ee3SSean Christopherson TP_PROTO(unsigned int rw, unsigned int reg, u64 val), 260229456fcSMarcelo Tosatti TP_ARGS(rw, reg, val), 261229456fcSMarcelo Tosatti 262229456fcSMarcelo Tosatti TP_STRUCT__entry( 263229456fcSMarcelo Tosatti __field( unsigned int, rw ) 264229456fcSMarcelo Tosatti __field( unsigned int, reg ) 265b9964ee3SSean Christopherson __field( u64, val ) 266229456fcSMarcelo Tosatti ), 267229456fcSMarcelo Tosatti 268229456fcSMarcelo Tosatti TP_fast_assign( 269229456fcSMarcelo Tosatti __entry->rw = rw; 270229456fcSMarcelo Tosatti __entry->reg = reg; 271229456fcSMarcelo Tosatti __entry->val = val; 272229456fcSMarcelo Tosatti ), 273229456fcSMarcelo Tosatti 274b9964ee3SSean Christopherson TP_printk("apic_%s %s = 0x%llx", 275229456fcSMarcelo Tosatti __entry->rw ? "write" : "read", 276cb247721SAvi Kivity __print_symbolic(__entry->reg, kvm_trace_symbol_apic), 277cb247721SAvi Kivity __entry->val) 278229456fcSMarcelo Tosatti ); 279229456fcSMarcelo Tosatti 280229456fcSMarcelo Tosatti #define trace_kvm_apic_read(reg, val) trace_kvm_apic(0, reg, val) 281229456fcSMarcelo Tosatti #define trace_kvm_apic_write(reg, val) trace_kvm_apic(1, reg, val) 282229456fcSMarcelo Tosatti 283aa17911eSAvi Kivity #define KVM_ISA_VMX 1 284aa17911eSAvi Kivity #define KVM_ISA_SVM 2 285aa17911eSAvi Kivity 2862c4c4132SSean Christopherson #define kvm_print_exit_reason(exit_reason, isa) \ 2872c4c4132SSean Christopherson (isa == KVM_ISA_VMX) ? \ 2882c4c4132SSean Christopherson __print_symbolic(exit_reason & 0xffff, VMX_EXIT_REASONS) : \ 2892c4c4132SSean Christopherson __print_symbolic(exit_reason, SVM_EXIT_REASONS), \ 2902c4c4132SSean Christopherson (isa == KVM_ISA_VMX && exit_reason & ~0xffff) ? " " : "", \ 2912c4c4132SSean Christopherson (isa == KVM_ISA_VMX) ? \ 2922c4c4132SSean Christopherson __print_flags(exit_reason & ~0xffff, " ", VMX_EXIT_REASON_FLAGS) : "" 2932c4c4132SSean Christopherson 294029e8c8aSSean Christopherson #define TRACE_EVENT_KVM_EXIT(name) \ 295029e8c8aSSean Christopherson TRACE_EVENT(name, \ 2960a62a031SDavid Edmondson TP_PROTO(struct kvm_vcpu *vcpu, u32 isa), \ 2970a62a031SDavid Edmondson TP_ARGS(vcpu, isa), \ 298029e8c8aSSean Christopherson \ 299029e8c8aSSean Christopherson TP_STRUCT__entry( \ 300029e8c8aSSean Christopherson __field( unsigned int, exit_reason ) \ 301029e8c8aSSean Christopherson __field( unsigned long, guest_rip ) \ 302029e8c8aSSean Christopherson __field( u32, isa ) \ 303029e8c8aSSean Christopherson __field( u64, info1 ) \ 304029e8c8aSSean Christopherson __field( u64, info2 ) \ 305029e8c8aSSean Christopherson __field( u32, intr_info ) \ 306029e8c8aSSean Christopherson __field( u32, error_code ) \ 307029e8c8aSSean Christopherson __field( unsigned int, vcpu_id ) \ 308029e8c8aSSean Christopherson ), \ 309029e8c8aSSean Christopherson \ 310029e8c8aSSean Christopherson TP_fast_assign( \ 311029e8c8aSSean Christopherson __entry->guest_rip = kvm_rip_read(vcpu); \ 312029e8c8aSSean Christopherson __entry->isa = isa; \ 313029e8c8aSSean Christopherson __entry->vcpu_id = vcpu->vcpu_id; \ 3140a62a031SDavid Edmondson static_call(kvm_x86_get_exit_info)(vcpu, \ 3150a62a031SDavid Edmondson &__entry->exit_reason, \ 3160a62a031SDavid Edmondson &__entry->info1, \ 317029e8c8aSSean Christopherson &__entry->info2, \ 318029e8c8aSSean Christopherson &__entry->intr_info, \ 319029e8c8aSSean Christopherson &__entry->error_code); \ 320029e8c8aSSean Christopherson ), \ 321029e8c8aSSean Christopherson \ 322029e8c8aSSean Christopherson TP_printk("vcpu %u reason %s%s%s rip 0x%lx info1 0x%016llx " \ 323029e8c8aSSean Christopherson "info2 0x%016llx intr_info 0x%08x error_code 0x%08x", \ 324029e8c8aSSean Christopherson __entry->vcpu_id, \ 325029e8c8aSSean Christopherson kvm_print_exit_reason(__entry->exit_reason, __entry->isa), \ 326029e8c8aSSean Christopherson __entry->guest_rip, __entry->info1, __entry->info2, \ 327029e8c8aSSean Christopherson __entry->intr_info, __entry->error_code) \ 328029e8c8aSSean Christopherson ) 329029e8c8aSSean Christopherson 330229456fcSMarcelo Tosatti /* 331229456fcSMarcelo Tosatti * Tracepoint for kvm guest exit: 332229456fcSMarcelo Tosatti */ 333029e8c8aSSean Christopherson TRACE_EVENT_KVM_EXIT(kvm_exit); 334229456fcSMarcelo Tosatti 335229456fcSMarcelo Tosatti /* 336229456fcSMarcelo Tosatti * Tracepoint for kvm interrupt injection: 337229456fcSMarcelo Tosatti */ 338229456fcSMarcelo Tosatti TRACE_EVENT(kvm_inj_virq, 3392d613912SSean Christopherson TP_PROTO(unsigned int vector, bool soft, bool reinjected), 3402d613912SSean Christopherson TP_ARGS(vector, soft, reinjected), 341229456fcSMarcelo Tosatti 342229456fcSMarcelo Tosatti TP_STRUCT__entry( 3432d613912SSean Christopherson __field( unsigned int, vector ) 3442d613912SSean Christopherson __field( bool, soft ) 3452d613912SSean Christopherson __field( bool, reinjected ) 346229456fcSMarcelo Tosatti ), 347229456fcSMarcelo Tosatti 348229456fcSMarcelo Tosatti TP_fast_assign( 3492d613912SSean Christopherson __entry->vector = vector; 3502d613912SSean Christopherson __entry->soft = soft; 3512d613912SSean Christopherson __entry->reinjected = reinjected; 352229456fcSMarcelo Tosatti ), 353229456fcSMarcelo Tosatti 3542d613912SSean Christopherson TP_printk("%s 0x%x%s", 3552d613912SSean Christopherson __entry->soft ? "Soft/INTn" : "IRQ", __entry->vector, 3562d613912SSean Christopherson __entry->reinjected ? " [reinjected]" : "") 357229456fcSMarcelo Tosatti ); 358229456fcSMarcelo Tosatti 3595c1c85d0SAvi Kivity #define EXS(x) { x##_VECTOR, "#" #x } 3605c1c85d0SAvi Kivity 3615c1c85d0SAvi Kivity #define kvm_trace_sym_exc \ 3625c1c85d0SAvi Kivity EXS(DE), EXS(DB), EXS(BP), EXS(OF), EXS(BR), EXS(UD), EXS(NM), \ 3635c1c85d0SAvi Kivity EXS(DF), EXS(TS), EXS(NP), EXS(SS), EXS(GP), EXS(PF), \ 364aba2f06cSPaolo Bonzini EXS(MF), EXS(AC), EXS(MC) 3655c1c85d0SAvi Kivity 3665c1c85d0SAvi Kivity /* 3675c1c85d0SAvi Kivity * Tracepoint for kvm interrupt injection: 3685c1c85d0SAvi Kivity */ 3695c1c85d0SAvi Kivity TRACE_EVENT(kvm_inj_exception, 370a61d7c54SSean Christopherson TP_PROTO(unsigned exception, bool has_error, unsigned error_code, 371a61d7c54SSean Christopherson bool reinjected), 372a61d7c54SSean Christopherson TP_ARGS(exception, has_error, error_code, reinjected), 3735c1c85d0SAvi Kivity 3745c1c85d0SAvi Kivity TP_STRUCT__entry( 3755c1c85d0SAvi Kivity __field( u8, exception ) 3765c1c85d0SAvi Kivity __field( u8, has_error ) 3775c1c85d0SAvi Kivity __field( u32, error_code ) 378a61d7c54SSean Christopherson __field( bool, reinjected ) 3795c1c85d0SAvi Kivity ), 3805c1c85d0SAvi Kivity 3815c1c85d0SAvi Kivity TP_fast_assign( 3825c1c85d0SAvi Kivity __entry->exception = exception; 3835c1c85d0SAvi Kivity __entry->has_error = has_error; 3845c1c85d0SAvi Kivity __entry->error_code = error_code; 385a61d7c54SSean Christopherson __entry->reinjected = reinjected; 3865c1c85d0SAvi Kivity ), 3875c1c85d0SAvi Kivity 38821d4c575SSean Christopherson TP_printk("%s%s%s%s%s", 3895c1c85d0SAvi Kivity __print_symbolic(__entry->exception, kvm_trace_sym_exc), 39021d4c575SSean Christopherson !__entry->has_error ? "" : " (", 39121d4c575SSean Christopherson !__entry->has_error ? "" : __print_symbolic(__entry->error_code, { }), 39221d4c575SSean Christopherson !__entry->has_error ? "" : ")", 393a61d7c54SSean Christopherson __entry->reinjected ? " [reinjected]" : "") 3945c1c85d0SAvi Kivity ); 3955c1c85d0SAvi Kivity 396229456fcSMarcelo Tosatti /* 397229456fcSMarcelo Tosatti * Tracepoint for page fault. 398229456fcSMarcelo Tosatti */ 399229456fcSMarcelo Tosatti TRACE_EVENT(kvm_page_fault, 400bff0adc4SSean Christopherson TP_PROTO(struct kvm_vcpu *vcpu, u64 fault_address, u64 error_code), 401faa03b39SWonhyuk Yang TP_ARGS(vcpu, fault_address, error_code), 402229456fcSMarcelo Tosatti 403229456fcSMarcelo Tosatti TP_STRUCT__entry( 404faa03b39SWonhyuk Yang __field( unsigned int, vcpu_id ) 405faa03b39SWonhyuk Yang __field( unsigned long, guest_rip ) 406bff0adc4SSean Christopherson __field( u64, fault_address ) 407bff0adc4SSean Christopherson __field( u64, error_code ) 408229456fcSMarcelo Tosatti ), 409229456fcSMarcelo Tosatti 410229456fcSMarcelo Tosatti TP_fast_assign( 411faa03b39SWonhyuk Yang __entry->vcpu_id = vcpu->vcpu_id; 412faa03b39SWonhyuk Yang __entry->guest_rip = kvm_rip_read(vcpu); 413229456fcSMarcelo Tosatti __entry->fault_address = fault_address; 414229456fcSMarcelo Tosatti __entry->error_code = error_code; 415229456fcSMarcelo Tosatti ), 416229456fcSMarcelo Tosatti 417bff0adc4SSean Christopherson TP_printk("vcpu %u rip 0x%lx address 0x%016llx error_code 0x%llx", 418faa03b39SWonhyuk Yang __entry->vcpu_id, __entry->guest_rip, 419229456fcSMarcelo Tosatti __entry->fault_address, __entry->error_code) 420229456fcSMarcelo Tosatti ); 421229456fcSMarcelo Tosatti 422229456fcSMarcelo Tosatti /* 423229456fcSMarcelo Tosatti * Tracepoint for guest MSR access. 424229456fcSMarcelo Tosatti */ 425229456fcSMarcelo Tosatti TRACE_EVENT(kvm_msr, 42659200273SAvi Kivity TP_PROTO(unsigned write, u32 ecx, u64 data, bool exception), 42759200273SAvi Kivity TP_ARGS(write, ecx, data, exception), 428229456fcSMarcelo Tosatti 429229456fcSMarcelo Tosatti TP_STRUCT__entry( 4306e7d1529SAvi Kivity __field( unsigned, write ) 4316e7d1529SAvi Kivity __field( u32, ecx ) 4326e7d1529SAvi Kivity __field( u64, data ) 43359200273SAvi Kivity __field( u8, exception ) 434229456fcSMarcelo Tosatti ), 435229456fcSMarcelo Tosatti 436229456fcSMarcelo Tosatti TP_fast_assign( 4376e7d1529SAvi Kivity __entry->write = write; 438229456fcSMarcelo Tosatti __entry->ecx = ecx; 439229456fcSMarcelo Tosatti __entry->data = data; 44059200273SAvi Kivity __entry->exception = exception; 441229456fcSMarcelo Tosatti ), 442229456fcSMarcelo Tosatti 44359200273SAvi Kivity TP_printk("msr_%s %x = 0x%llx%s", 4446e7d1529SAvi Kivity __entry->write ? "write" : "read", 44559200273SAvi Kivity __entry->ecx, __entry->data, 44659200273SAvi Kivity __entry->exception ? " (#GP)" : "") 447229456fcSMarcelo Tosatti ); 448229456fcSMarcelo Tosatti 44959200273SAvi Kivity #define trace_kvm_msr_read(ecx, data) trace_kvm_msr(0, ecx, data, false) 45059200273SAvi Kivity #define trace_kvm_msr_write(ecx, data) trace_kvm_msr(1, ecx, data, false) 45159200273SAvi Kivity #define trace_kvm_msr_read_ex(ecx) trace_kvm_msr(0, ecx, 0, true) 45259200273SAvi Kivity #define trace_kvm_msr_write_ex(ecx, data) trace_kvm_msr(1, ecx, data, true) 453229456fcSMarcelo Tosatti 454229456fcSMarcelo Tosatti /* 455229456fcSMarcelo Tosatti * Tracepoint for guest CR access. 456229456fcSMarcelo Tosatti */ 457229456fcSMarcelo Tosatti TRACE_EVENT(kvm_cr, 458229456fcSMarcelo Tosatti TP_PROTO(unsigned int rw, unsigned int cr, unsigned long val), 459229456fcSMarcelo Tosatti TP_ARGS(rw, cr, val), 460229456fcSMarcelo Tosatti 461229456fcSMarcelo Tosatti TP_STRUCT__entry( 462229456fcSMarcelo Tosatti __field( unsigned int, rw ) 463229456fcSMarcelo Tosatti __field( unsigned int, cr ) 464229456fcSMarcelo Tosatti __field( unsigned long, val ) 465229456fcSMarcelo Tosatti ), 466229456fcSMarcelo Tosatti 467229456fcSMarcelo Tosatti TP_fast_assign( 468229456fcSMarcelo Tosatti __entry->rw = rw; 469229456fcSMarcelo Tosatti __entry->cr = cr; 470229456fcSMarcelo Tosatti __entry->val = val; 471229456fcSMarcelo Tosatti ), 472229456fcSMarcelo Tosatti 473229456fcSMarcelo Tosatti TP_printk("cr_%s %x = 0x%lx", 474229456fcSMarcelo Tosatti __entry->rw ? "write" : "read", 475229456fcSMarcelo Tosatti __entry->cr, __entry->val) 476229456fcSMarcelo Tosatti ); 477229456fcSMarcelo Tosatti 478229456fcSMarcelo Tosatti #define trace_kvm_cr_read(cr, val) trace_kvm_cr(0, cr, val) 479229456fcSMarcelo Tosatti #define trace_kvm_cr_write(cr, val) trace_kvm_cr(1, cr, val) 480229456fcSMarcelo Tosatti 4811000ff8dSGleb Natapov TRACE_EVENT(kvm_pic_set_irq, 4821000ff8dSGleb Natapov TP_PROTO(__u8 chip, __u8 pin, __u8 elcr, __u8 imr, bool coalesced), 4831000ff8dSGleb Natapov TP_ARGS(chip, pin, elcr, imr, coalesced), 4841000ff8dSGleb Natapov 4851000ff8dSGleb Natapov TP_STRUCT__entry( 4861000ff8dSGleb Natapov __field( __u8, chip ) 4871000ff8dSGleb Natapov __field( __u8, pin ) 4881000ff8dSGleb Natapov __field( __u8, elcr ) 4891000ff8dSGleb Natapov __field( __u8, imr ) 4901000ff8dSGleb Natapov __field( bool, coalesced ) 4911000ff8dSGleb Natapov ), 4921000ff8dSGleb Natapov 4931000ff8dSGleb Natapov TP_fast_assign( 4941000ff8dSGleb Natapov __entry->chip = chip; 4951000ff8dSGleb Natapov __entry->pin = pin; 4961000ff8dSGleb Natapov __entry->elcr = elcr; 4971000ff8dSGleb Natapov __entry->imr = imr; 4981000ff8dSGleb Natapov __entry->coalesced = coalesced; 4991000ff8dSGleb Natapov ), 5001000ff8dSGleb Natapov 5011000ff8dSGleb Natapov TP_printk("chip %u pin %u (%s%s)%s", 5021000ff8dSGleb Natapov __entry->chip, __entry->pin, 5031000ff8dSGleb Natapov (__entry->elcr & (1 << __entry->pin)) ? "level":"edge", 5041000ff8dSGleb Natapov (__entry->imr & (1 << __entry->pin)) ? "|masked":"", 5051000ff8dSGleb Natapov __entry->coalesced ? " (coalesced)" : "") 5061000ff8dSGleb Natapov ); 5071000ff8dSGleb Natapov 5081000ff8dSGleb Natapov #define kvm_apic_dst_shorthand \ 5091000ff8dSGleb Natapov {0x0, "dst"}, \ 5101000ff8dSGleb Natapov {0x1, "self"}, \ 5111000ff8dSGleb Natapov {0x2, "all"}, \ 5121000ff8dSGleb Natapov {0x3, "all-but-self"} 5131000ff8dSGleb Natapov 5141000ff8dSGleb Natapov TRACE_EVENT(kvm_apic_ipi, 5151000ff8dSGleb Natapov TP_PROTO(__u32 icr_low, __u32 dest_id), 5161000ff8dSGleb Natapov TP_ARGS(icr_low, dest_id), 5171000ff8dSGleb Natapov 5181000ff8dSGleb Natapov TP_STRUCT__entry( 5191000ff8dSGleb Natapov __field( __u32, icr_low ) 5201000ff8dSGleb Natapov __field( __u32, dest_id ) 5211000ff8dSGleb Natapov ), 5221000ff8dSGleb Natapov 5231000ff8dSGleb Natapov TP_fast_assign( 5241000ff8dSGleb Natapov __entry->icr_low = icr_low; 5251000ff8dSGleb Natapov __entry->dest_id = dest_id; 5261000ff8dSGleb Natapov ), 5271000ff8dSGleb Natapov 5281000ff8dSGleb Natapov TP_printk("dst %x vec %u (%s|%s|%s|%s|%s)", 5291000ff8dSGleb Natapov __entry->dest_id, (u8)__entry->icr_low, 5301000ff8dSGleb Natapov __print_symbolic((__entry->icr_low >> 8 & 0x7), 5311000ff8dSGleb Natapov kvm_deliver_mode), 5321000ff8dSGleb Natapov (__entry->icr_low & (1<<11)) ? "logical" : "physical", 5331000ff8dSGleb Natapov (__entry->icr_low & (1<<14)) ? "assert" : "de-assert", 5341000ff8dSGleb Natapov (__entry->icr_low & (1<<15)) ? "level" : "edge", 5351000ff8dSGleb Natapov __print_symbolic((__entry->icr_low >> 18 & 0x3), 5361000ff8dSGleb Natapov kvm_apic_dst_shorthand)) 5371000ff8dSGleb Natapov ); 5381000ff8dSGleb Natapov 5391000ff8dSGleb Natapov TRACE_EVENT(kvm_apic_accept_irq, 5407a223e06SVitaly Kuznetsov TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec), 541a183b638SPaolo Bonzini TP_ARGS(apicid, dm, tm, vec), 5421000ff8dSGleb Natapov 5431000ff8dSGleb Natapov TP_STRUCT__entry( 5441000ff8dSGleb Natapov __field( __u32, apicid ) 5451000ff8dSGleb Natapov __field( __u16, dm ) 5467a223e06SVitaly Kuznetsov __field( __u16, tm ) 5471000ff8dSGleb Natapov __field( __u8, vec ) 5481000ff8dSGleb Natapov ), 5491000ff8dSGleb Natapov 5501000ff8dSGleb Natapov TP_fast_assign( 5511000ff8dSGleb Natapov __entry->apicid = apicid; 5521000ff8dSGleb Natapov __entry->dm = dm; 5531000ff8dSGleb Natapov __entry->tm = tm; 5541000ff8dSGleb Natapov __entry->vec = vec; 5551000ff8dSGleb Natapov ), 5561000ff8dSGleb Natapov 557a183b638SPaolo Bonzini TP_printk("apicid %x vec %u (%s|%s)", 5581000ff8dSGleb Natapov __entry->apicid, __entry->vec, 5591000ff8dSGleb Natapov __print_symbolic((__entry->dm >> 8 & 0x7), kvm_deliver_mode), 560a183b638SPaolo Bonzini __entry->tm ? "level" : "edge") 5611000ff8dSGleb Natapov ); 5621000ff8dSGleb Natapov 563ae7a2a3fSMichael S. Tsirkin TRACE_EVENT(kvm_eoi, 564ae7a2a3fSMichael S. Tsirkin TP_PROTO(struct kvm_lapic *apic, int vector), 565ae7a2a3fSMichael S. Tsirkin TP_ARGS(apic, vector), 566ae7a2a3fSMichael S. Tsirkin 567ae7a2a3fSMichael S. Tsirkin TP_STRUCT__entry( 568ae7a2a3fSMichael S. Tsirkin __field( __u32, apicid ) 569ae7a2a3fSMichael S. Tsirkin __field( int, vector ) 570ae7a2a3fSMichael S. Tsirkin ), 571ae7a2a3fSMichael S. Tsirkin 572ae7a2a3fSMichael S. Tsirkin TP_fast_assign( 573ae7a2a3fSMichael S. Tsirkin __entry->apicid = apic->vcpu->vcpu_id; 574ae7a2a3fSMichael S. Tsirkin __entry->vector = vector; 575ae7a2a3fSMichael S. Tsirkin ), 576ae7a2a3fSMichael S. Tsirkin 577ae7a2a3fSMichael S. Tsirkin TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) 578ae7a2a3fSMichael S. Tsirkin ); 579ae7a2a3fSMichael S. Tsirkin 580ae7a2a3fSMichael S. Tsirkin TRACE_EVENT(kvm_pv_eoi, 581ae7a2a3fSMichael S. Tsirkin TP_PROTO(struct kvm_lapic *apic, int vector), 582ae7a2a3fSMichael S. Tsirkin TP_ARGS(apic, vector), 583ae7a2a3fSMichael S. Tsirkin 584ae7a2a3fSMichael S. Tsirkin TP_STRUCT__entry( 585ae7a2a3fSMichael S. Tsirkin __field( __u32, apicid ) 586ae7a2a3fSMichael S. Tsirkin __field( int, vector ) 587ae7a2a3fSMichael S. Tsirkin ), 588ae7a2a3fSMichael S. Tsirkin 589ae7a2a3fSMichael S. Tsirkin TP_fast_assign( 590ae7a2a3fSMichael S. Tsirkin __entry->apicid = apic->vcpu->vcpu_id; 591ae7a2a3fSMichael S. Tsirkin __entry->vector = vector; 592ae7a2a3fSMichael S. Tsirkin ), 593ae7a2a3fSMichael S. Tsirkin 594ae7a2a3fSMichael S. Tsirkin TP_printk("apicid %x vector %d", __entry->apicid, __entry->vector) 595ae7a2a3fSMichael S. Tsirkin ); 596ae7a2a3fSMichael S. Tsirkin 5970ac406deSJoerg Roedel /* 5980ac406deSJoerg Roedel * Tracepoint for nested VMRUN 5990ac406deSJoerg Roedel */ 60089e54ec5SMingwei Zhang TRACE_EVENT(kvm_nested_vmenter, 6010ac406deSJoerg Roedel TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl, 60202dfc44fSMingwei Zhang __u32 event_inj, bool tdp_enabled, __u64 guest_tdp_pgd, 60302dfc44fSMingwei Zhang __u64 guest_cr3, __u32 isa), 60402dfc44fSMingwei Zhang TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, tdp_enabled, 60502dfc44fSMingwei Zhang guest_tdp_pgd, guest_cr3, isa), 6060ac406deSJoerg Roedel 6070ac406deSJoerg Roedel TP_STRUCT__entry( 6080ac406deSJoerg Roedel __field( __u64, rip ) 6090ac406deSJoerg Roedel __field( __u64, vmcb ) 6100ac406deSJoerg Roedel __field( __u64, nested_rip ) 6110ac406deSJoerg Roedel __field( __u32, int_ctl ) 6120ac406deSJoerg Roedel __field( __u32, event_inj ) 61389e54ec5SMingwei Zhang __field( bool, tdp_enabled ) 61402dfc44fSMingwei Zhang __field( __u64, guest_pgd ) 61589e54ec5SMingwei Zhang __field( __u32, isa ) 6160ac406deSJoerg Roedel ), 6170ac406deSJoerg Roedel 6180ac406deSJoerg Roedel TP_fast_assign( 6190ac406deSJoerg Roedel __entry->rip = rip; 6200ac406deSJoerg Roedel __entry->vmcb = vmcb; 6210ac406deSJoerg Roedel __entry->nested_rip = nested_rip; 6220ac406deSJoerg Roedel __entry->int_ctl = int_ctl; 6230ac406deSJoerg Roedel __entry->event_inj = event_inj; 62489e54ec5SMingwei Zhang __entry->tdp_enabled = tdp_enabled; 62502dfc44fSMingwei Zhang __entry->guest_pgd = tdp_enabled ? guest_tdp_pgd : guest_cr3; 62689e54ec5SMingwei Zhang __entry->isa = isa; 6270ac406deSJoerg Roedel ), 6280ac406deSJoerg Roedel 62989e54ec5SMingwei Zhang TP_printk("rip: 0x%016llx %s: 0x%016llx nested_rip: 0x%016llx " 63002dfc44fSMingwei Zhang "int_ctl: 0x%08x event_inj: 0x%08x nested_%s=%s %s: 0x%016llx", 63189e54ec5SMingwei Zhang __entry->rip, 63289e54ec5SMingwei Zhang __entry->isa == KVM_ISA_VMX ? "vmcs" : "vmcb", 63389e54ec5SMingwei Zhang __entry->vmcb, 63489e54ec5SMingwei Zhang __entry->nested_rip, 63589e54ec5SMingwei Zhang __entry->int_ctl, 63689e54ec5SMingwei Zhang __entry->event_inj, 63789e54ec5SMingwei Zhang __entry->isa == KVM_ISA_VMX ? "ept" : "npt", 63802dfc44fSMingwei Zhang __entry->tdp_enabled ? "y" : "n", 63902dfc44fSMingwei Zhang !__entry->tdp_enabled ? "guest_cr3" : 64002dfc44fSMingwei Zhang __entry->isa == KVM_ISA_VMX ? "nested_eptp" : "nested_cr3", 64102dfc44fSMingwei Zhang __entry->guest_pgd) 6420ac406deSJoerg Roedel ); 6430ac406deSJoerg Roedel 6442e554e8dSJoerg Roedel TRACE_EVENT(kvm_nested_intercepts, 6454c44e8d6SBabu Moger TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions, 6464c44e8d6SBabu Moger __u32 intercept1, __u32 intercept2, __u32 intercept3), 6474c44e8d6SBabu Moger TP_ARGS(cr_read, cr_write, exceptions, intercept1, 6484c44e8d6SBabu Moger intercept2, intercept3), 6492e554e8dSJoerg Roedel 6502e554e8dSJoerg Roedel TP_STRUCT__entry( 6512e554e8dSJoerg Roedel __field( __u16, cr_read ) 6522e554e8dSJoerg Roedel __field( __u16, cr_write ) 6532e554e8dSJoerg Roedel __field( __u32, exceptions ) 654c62e2e94SBabu Moger __field( __u32, intercept1 ) 655c62e2e94SBabu Moger __field( __u32, intercept2 ) 6564c44e8d6SBabu Moger __field( __u32, intercept3 ) 6572e554e8dSJoerg Roedel ), 6582e554e8dSJoerg Roedel 6592e554e8dSJoerg Roedel TP_fast_assign( 6602e554e8dSJoerg Roedel __entry->cr_read = cr_read; 6612e554e8dSJoerg Roedel __entry->cr_write = cr_write; 6622e554e8dSJoerg Roedel __entry->exceptions = exceptions; 663c62e2e94SBabu Moger __entry->intercept1 = intercept1; 664c62e2e94SBabu Moger __entry->intercept2 = intercept2; 6654c44e8d6SBabu Moger __entry->intercept3 = intercept3; 6662e554e8dSJoerg Roedel ), 6672e554e8dSJoerg Roedel 668c62e2e94SBabu Moger TP_printk("cr_read: %04x cr_write: %04x excp: %08x " 6694c44e8d6SBabu Moger "intercepts: %08x %08x %08x", 6702e554e8dSJoerg Roedel __entry->cr_read, __entry->cr_write, __entry->exceptions, 6714c44e8d6SBabu Moger __entry->intercept1, __entry->intercept2, __entry->intercept3) 6722e554e8dSJoerg Roedel ); 673d8cabddfSJoerg Roedel /* 674d8cabddfSJoerg Roedel * Tracepoint for #VMEXIT while nested 675d8cabddfSJoerg Roedel */ 676cc167bd7SSean Christopherson TRACE_EVENT_KVM_EXIT(kvm_nested_vmexit); 677d8cabddfSJoerg Roedel 67817897f36SJoerg Roedel /* 67917897f36SJoerg Roedel * Tracepoint for #VMEXIT reinjected to the guest 68017897f36SJoerg Roedel */ 68117897f36SJoerg Roedel TRACE_EVENT(kvm_nested_vmexit_inject, 68217897f36SJoerg Roedel TP_PROTO(__u32 exit_code, 68317897f36SJoerg Roedel __u64 exit_info1, __u64 exit_info2, 684e097e5ffSStefan Hajnoczi __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), 68517897f36SJoerg Roedel TP_ARGS(exit_code, exit_info1, exit_info2, 686e097e5ffSStefan Hajnoczi exit_int_info, exit_int_info_err, isa), 68717897f36SJoerg Roedel 68817897f36SJoerg Roedel TP_STRUCT__entry( 68917897f36SJoerg Roedel __field( __u32, exit_code ) 69017897f36SJoerg Roedel __field( __u64, exit_info1 ) 69117897f36SJoerg Roedel __field( __u64, exit_info2 ) 69217897f36SJoerg Roedel __field( __u32, exit_int_info ) 69317897f36SJoerg Roedel __field( __u32, exit_int_info_err ) 694e097e5ffSStefan Hajnoczi __field( __u32, isa ) 69517897f36SJoerg Roedel ), 69617897f36SJoerg Roedel 69717897f36SJoerg Roedel TP_fast_assign( 69817897f36SJoerg Roedel __entry->exit_code = exit_code; 69917897f36SJoerg Roedel __entry->exit_info1 = exit_info1; 70017897f36SJoerg Roedel __entry->exit_info2 = exit_info2; 70117897f36SJoerg Roedel __entry->exit_int_info = exit_int_info; 70217897f36SJoerg Roedel __entry->exit_int_info_err = exit_int_info_err; 703e097e5ffSStefan Hajnoczi __entry->isa = isa; 70417897f36SJoerg Roedel ), 70517897f36SJoerg Roedel 7062c4c4132SSean Christopherson TP_printk("reason: %s%s%s ext_inf1: 0x%016llx " 707052ce621SJoerg Roedel "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", 7082c4c4132SSean Christopherson kvm_print_exit_reason(__entry->exit_code, __entry->isa), 70917897f36SJoerg Roedel __entry->exit_info1, __entry->exit_info2, 71017897f36SJoerg Roedel __entry->exit_int_info, __entry->exit_int_info_err) 71117897f36SJoerg Roedel ); 712236649deSJoerg Roedel 713236649deSJoerg Roedel /* 714236649deSJoerg Roedel * Tracepoint for nested #vmexit because of interrupt pending 715236649deSJoerg Roedel */ 716236649deSJoerg Roedel TRACE_EVENT(kvm_nested_intr_vmexit, 717236649deSJoerg Roedel TP_PROTO(__u64 rip), 718236649deSJoerg Roedel TP_ARGS(rip), 719236649deSJoerg Roedel 720236649deSJoerg Roedel TP_STRUCT__entry( 721236649deSJoerg Roedel __field( __u64, rip ) 722236649deSJoerg Roedel ), 723236649deSJoerg Roedel 724236649deSJoerg Roedel TP_fast_assign( 725236649deSJoerg Roedel __entry->rip = rip 726236649deSJoerg Roedel ), 727236649deSJoerg Roedel 728052ce621SJoerg Roedel TP_printk("rip: 0x%016llx", __entry->rip) 729236649deSJoerg Roedel ); 730ec1ff790SJoerg Roedel 731ec1ff790SJoerg Roedel /* 732ec1ff790SJoerg Roedel * Tracepoint for nested #vmexit because of interrupt pending 733ec1ff790SJoerg Roedel */ 734ec1ff790SJoerg Roedel TRACE_EVENT(kvm_invlpga, 735*79b79ea2SSean Christopherson TP_PROTO(__u64 rip, unsigned int asid, u64 address), 736ec1ff790SJoerg Roedel TP_ARGS(rip, asid, address), 737ec1ff790SJoerg Roedel 738ec1ff790SJoerg Roedel TP_STRUCT__entry( 739ec1ff790SJoerg Roedel __field( __u64, rip ) 740*79b79ea2SSean Christopherson __field( unsigned int, asid ) 741ec1ff790SJoerg Roedel __field( __u64, address ) 742ec1ff790SJoerg Roedel ), 743ec1ff790SJoerg Roedel 744ec1ff790SJoerg Roedel TP_fast_assign( 745ec1ff790SJoerg Roedel __entry->rip = rip; 746ec1ff790SJoerg Roedel __entry->asid = asid; 747ec1ff790SJoerg Roedel __entry->address = address; 748ec1ff790SJoerg Roedel ), 749ec1ff790SJoerg Roedel 750*79b79ea2SSean Christopherson TP_printk("rip: 0x%016llx asid: %u address: 0x%016llx", 751ec1ff790SJoerg Roedel __entry->rip, __entry->asid, __entry->address) 752ec1ff790SJoerg Roedel ); 753532a46b9SJoerg Roedel 754532a46b9SJoerg Roedel /* 755532a46b9SJoerg Roedel * Tracepoint for nested #vmexit because of interrupt pending 756532a46b9SJoerg Roedel */ 757532a46b9SJoerg Roedel TRACE_EVENT(kvm_skinit, 758532a46b9SJoerg Roedel TP_PROTO(__u64 rip, __u32 slb), 759532a46b9SJoerg Roedel TP_ARGS(rip, slb), 760532a46b9SJoerg Roedel 761532a46b9SJoerg Roedel TP_STRUCT__entry( 762532a46b9SJoerg Roedel __field( __u64, rip ) 763532a46b9SJoerg Roedel __field( __u32, slb ) 764532a46b9SJoerg Roedel ), 765532a46b9SJoerg Roedel 766532a46b9SJoerg Roedel TP_fast_assign( 767532a46b9SJoerg Roedel __entry->rip = rip; 768532a46b9SJoerg Roedel __entry->slb = slb; 769532a46b9SJoerg Roedel ), 770532a46b9SJoerg Roedel 771052ce621SJoerg Roedel TP_printk("rip: 0x%016llx slb: 0x%08x", 772532a46b9SJoerg Roedel __entry->rip, __entry->slb) 773532a46b9SJoerg Roedel ); 774532a46b9SJoerg Roedel 775e46479f8SAvi Kivity #define KVM_EMUL_INSN_F_CR0_PE (1 << 0) 776e46479f8SAvi Kivity #define KVM_EMUL_INSN_F_EFL_VM (1 << 1) 777e46479f8SAvi Kivity #define KVM_EMUL_INSN_F_CS_D (1 << 2) 778e46479f8SAvi Kivity #define KVM_EMUL_INSN_F_CS_L (1 << 3) 779e46479f8SAvi Kivity 780e46479f8SAvi Kivity #define kvm_trace_symbol_emul_flags \ 781e46479f8SAvi Kivity { 0, "real" }, \ 782e46479f8SAvi Kivity { KVM_EMUL_INSN_F_CR0_PE \ 783e46479f8SAvi Kivity | KVM_EMUL_INSN_F_EFL_VM, "vm16" }, \ 784e46479f8SAvi Kivity { KVM_EMUL_INSN_F_CR0_PE, "prot16" }, \ 785e46479f8SAvi Kivity { KVM_EMUL_INSN_F_CR0_PE \ 786e46479f8SAvi Kivity | KVM_EMUL_INSN_F_CS_D, "prot32" }, \ 787e46479f8SAvi Kivity { KVM_EMUL_INSN_F_CR0_PE \ 788e46479f8SAvi Kivity | KVM_EMUL_INSN_F_CS_L, "prot64" } 789e46479f8SAvi Kivity 790e46479f8SAvi Kivity #define kei_decode_mode(mode) ({ \ 791e46479f8SAvi Kivity u8 flags = 0xff; \ 792e46479f8SAvi Kivity switch (mode) { \ 793e46479f8SAvi Kivity case X86EMUL_MODE_REAL: \ 794e46479f8SAvi Kivity flags = 0; \ 795e46479f8SAvi Kivity break; \ 796e46479f8SAvi Kivity case X86EMUL_MODE_VM86: \ 797e46479f8SAvi Kivity flags = KVM_EMUL_INSN_F_EFL_VM; \ 798e46479f8SAvi Kivity break; \ 799e46479f8SAvi Kivity case X86EMUL_MODE_PROT16: \ 800e46479f8SAvi Kivity flags = KVM_EMUL_INSN_F_CR0_PE; \ 801e46479f8SAvi Kivity break; \ 802e46479f8SAvi Kivity case X86EMUL_MODE_PROT32: \ 803e46479f8SAvi Kivity flags = KVM_EMUL_INSN_F_CR0_PE \ 804e46479f8SAvi Kivity | KVM_EMUL_INSN_F_CS_D; \ 805e46479f8SAvi Kivity break; \ 806e46479f8SAvi Kivity case X86EMUL_MODE_PROT64: \ 807e46479f8SAvi Kivity flags = KVM_EMUL_INSN_F_CR0_PE \ 808e46479f8SAvi Kivity | KVM_EMUL_INSN_F_CS_L; \ 809e46479f8SAvi Kivity break; \ 810e46479f8SAvi Kivity } \ 811e46479f8SAvi Kivity flags; \ 812e46479f8SAvi Kivity }) 813e46479f8SAvi Kivity 814e46479f8SAvi Kivity TRACE_EVENT(kvm_emulate_insn, 815e46479f8SAvi Kivity TP_PROTO(struct kvm_vcpu *vcpu, __u8 failed), 816e46479f8SAvi Kivity TP_ARGS(vcpu, failed), 817e46479f8SAvi Kivity 818e46479f8SAvi Kivity TP_STRUCT__entry( 819e46479f8SAvi Kivity __field( __u64, rip ) 820e46479f8SAvi Kivity __field( __u32, csbase ) 821e46479f8SAvi Kivity __field( __u8, len ) 822e46479f8SAvi Kivity __array( __u8, insn, 15 ) 823e46479f8SAvi Kivity __field( __u8, flags ) 824e46479f8SAvi Kivity __field( __u8, failed ) 825e46479f8SAvi Kivity ), 826e46479f8SAvi Kivity 827e46479f8SAvi Kivity TP_fast_assign( 828b3646477SJason Baron __entry->csbase = static_call(kvm_x86_get_segment_base)(vcpu, VCPU_SREG_CS); 829c9b8b07cSSean Christopherson __entry->len = vcpu->arch.emulate_ctxt->fetch.ptr 830c9b8b07cSSean Christopherson - vcpu->arch.emulate_ctxt->fetch.data; 831c9b8b07cSSean Christopherson __entry->rip = vcpu->arch.emulate_ctxt->_eip - __entry->len; 832e46479f8SAvi Kivity memcpy(__entry->insn, 833c9b8b07cSSean Christopherson vcpu->arch.emulate_ctxt->fetch.data, 834e46479f8SAvi Kivity 15); 835c9b8b07cSSean Christopherson __entry->flags = kei_decode_mode(vcpu->arch.emulate_ctxt->mode); 836e46479f8SAvi Kivity __entry->failed = failed; 837e46479f8SAvi Kivity ), 838e46479f8SAvi Kivity 839e46479f8SAvi Kivity TP_printk("%x:%llx:%s (%s)%s", 840e46479f8SAvi Kivity __entry->csbase, __entry->rip, 841b102f1d0SNamhyung Kim __print_hex(__entry->insn, __entry->len), 842e46479f8SAvi Kivity __print_symbolic(__entry->flags, 843e46479f8SAvi Kivity kvm_trace_symbol_emul_flags), 844e46479f8SAvi Kivity __entry->failed ? " failed" : "" 845e46479f8SAvi Kivity ) 846e46479f8SAvi Kivity ); 847e46479f8SAvi Kivity 848e46479f8SAvi Kivity #define trace_kvm_emulate_insn_start(vcpu) trace_kvm_emulate_insn(vcpu, 0) 849e46479f8SAvi Kivity #define trace_kvm_emulate_insn_failed(vcpu) trace_kvm_emulate_insn(vcpu, 1) 850e46479f8SAvi Kivity 8514f022648SXiao Guangrong TRACE_EVENT( 8524f022648SXiao Guangrong vcpu_match_mmio, 8534f022648SXiao Guangrong TP_PROTO(gva_t gva, gpa_t gpa, bool write, bool gpa_match), 8544f022648SXiao Guangrong TP_ARGS(gva, gpa, write, gpa_match), 8554f022648SXiao Guangrong 8564f022648SXiao Guangrong TP_STRUCT__entry( 8574f022648SXiao Guangrong __field(gva_t, gva) 8584f022648SXiao Guangrong __field(gpa_t, gpa) 8594f022648SXiao Guangrong __field(bool, write) 8604f022648SXiao Guangrong __field(bool, gpa_match) 8614f022648SXiao Guangrong ), 8624f022648SXiao Guangrong 8634f022648SXiao Guangrong TP_fast_assign( 8644f022648SXiao Guangrong __entry->gva = gva; 8654f022648SXiao Guangrong __entry->gpa = gpa; 8664f022648SXiao Guangrong __entry->write = write; 8674f022648SXiao Guangrong __entry->gpa_match = gpa_match 8684f022648SXiao Guangrong ), 8694f022648SXiao Guangrong 8704f022648SXiao Guangrong TP_printk("gva %#lx gpa %#llx %s %s", __entry->gva, __entry->gpa, 8714f022648SXiao Guangrong __entry->write ? "Write" : "Read", 8724f022648SXiao Guangrong __entry->gpa_match ? "GPA" : "GVA") 8734f022648SXiao Guangrong ); 874d828199eSMarcelo Tosatti 875489223edSYoshihiro YUNOMAE TRACE_EVENT(kvm_write_tsc_offset, 876489223edSYoshihiro YUNOMAE TP_PROTO(unsigned int vcpu_id, __u64 previous_tsc_offset, 877489223edSYoshihiro YUNOMAE __u64 next_tsc_offset), 878489223edSYoshihiro YUNOMAE TP_ARGS(vcpu_id, previous_tsc_offset, next_tsc_offset), 879489223edSYoshihiro YUNOMAE 880489223edSYoshihiro YUNOMAE TP_STRUCT__entry( 881489223edSYoshihiro YUNOMAE __field( unsigned int, vcpu_id ) 882489223edSYoshihiro YUNOMAE __field( __u64, previous_tsc_offset ) 883489223edSYoshihiro YUNOMAE __field( __u64, next_tsc_offset ) 884489223edSYoshihiro YUNOMAE ), 885489223edSYoshihiro YUNOMAE 886489223edSYoshihiro YUNOMAE TP_fast_assign( 887489223edSYoshihiro YUNOMAE __entry->vcpu_id = vcpu_id; 888489223edSYoshihiro YUNOMAE __entry->previous_tsc_offset = previous_tsc_offset; 889489223edSYoshihiro YUNOMAE __entry->next_tsc_offset = next_tsc_offset; 890489223edSYoshihiro YUNOMAE ), 891489223edSYoshihiro YUNOMAE 892489223edSYoshihiro YUNOMAE TP_printk("vcpu=%u prev=%llu next=%llu", __entry->vcpu_id, 893489223edSYoshihiro YUNOMAE __entry->previous_tsc_offset, __entry->next_tsc_offset) 894489223edSYoshihiro YUNOMAE ); 895489223edSYoshihiro YUNOMAE 896d828199eSMarcelo Tosatti #ifdef CONFIG_X86_64 897d828199eSMarcelo Tosatti 898d828199eSMarcelo Tosatti #define host_clocks \ 899b95a8a27SThomas Gleixner {VDSO_CLOCKMODE_NONE, "none"}, \ 900b95a8a27SThomas Gleixner {VDSO_CLOCKMODE_TSC, "tsc"} \ 901d828199eSMarcelo Tosatti 902d828199eSMarcelo Tosatti TRACE_EVENT(kvm_update_master_clock, 903b48aa97eSMarcelo Tosatti TP_PROTO(bool use_master_clock, unsigned int host_clock, bool offset_matched), 904b48aa97eSMarcelo Tosatti TP_ARGS(use_master_clock, host_clock, offset_matched), 905d828199eSMarcelo Tosatti 906d828199eSMarcelo Tosatti TP_STRUCT__entry( 907d828199eSMarcelo Tosatti __field( bool, use_master_clock ) 908d828199eSMarcelo Tosatti __field( unsigned int, host_clock ) 909b48aa97eSMarcelo Tosatti __field( bool, offset_matched ) 910d828199eSMarcelo Tosatti ), 911d828199eSMarcelo Tosatti 912d828199eSMarcelo Tosatti TP_fast_assign( 913d828199eSMarcelo Tosatti __entry->use_master_clock = use_master_clock; 914d828199eSMarcelo Tosatti __entry->host_clock = host_clock; 915b48aa97eSMarcelo Tosatti __entry->offset_matched = offset_matched; 916d828199eSMarcelo Tosatti ), 917d828199eSMarcelo Tosatti 918b48aa97eSMarcelo Tosatti TP_printk("masterclock %d hostclock %s offsetmatched %u", 919d828199eSMarcelo Tosatti __entry->use_master_clock, 920b48aa97eSMarcelo Tosatti __print_symbolic(__entry->host_clock, host_clocks), 921b48aa97eSMarcelo Tosatti __entry->offset_matched) 922b48aa97eSMarcelo Tosatti ); 923b48aa97eSMarcelo Tosatti 924b48aa97eSMarcelo Tosatti TRACE_EVENT(kvm_track_tsc, 925b48aa97eSMarcelo Tosatti TP_PROTO(unsigned int vcpu_id, unsigned int nr_matched, 926b48aa97eSMarcelo Tosatti unsigned int online_vcpus, bool use_master_clock, 927b48aa97eSMarcelo Tosatti unsigned int host_clock), 928b48aa97eSMarcelo Tosatti TP_ARGS(vcpu_id, nr_matched, online_vcpus, use_master_clock, 929b48aa97eSMarcelo Tosatti host_clock), 930b48aa97eSMarcelo Tosatti 931b48aa97eSMarcelo Tosatti TP_STRUCT__entry( 932b48aa97eSMarcelo Tosatti __field( unsigned int, vcpu_id ) 933b48aa97eSMarcelo Tosatti __field( unsigned int, nr_vcpus_matched_tsc ) 934b48aa97eSMarcelo Tosatti __field( unsigned int, online_vcpus ) 935b48aa97eSMarcelo Tosatti __field( bool, use_master_clock ) 936b48aa97eSMarcelo Tosatti __field( unsigned int, host_clock ) 937b48aa97eSMarcelo Tosatti ), 938b48aa97eSMarcelo Tosatti 939b48aa97eSMarcelo Tosatti TP_fast_assign( 940b48aa97eSMarcelo Tosatti __entry->vcpu_id = vcpu_id; 941b48aa97eSMarcelo Tosatti __entry->nr_vcpus_matched_tsc = nr_matched; 942b48aa97eSMarcelo Tosatti __entry->online_vcpus = online_vcpus; 943b48aa97eSMarcelo Tosatti __entry->use_master_clock = use_master_clock; 944b48aa97eSMarcelo Tosatti __entry->host_clock = host_clock; 945b48aa97eSMarcelo Tosatti ), 946b48aa97eSMarcelo Tosatti 947b48aa97eSMarcelo Tosatti TP_printk("vcpu_id %u masterclock %u offsetmatched %u nr_online %u" 948b48aa97eSMarcelo Tosatti " hostclock %s", 949b48aa97eSMarcelo Tosatti __entry->vcpu_id, __entry->use_master_clock, 950b48aa97eSMarcelo Tosatti __entry->nr_vcpus_matched_tsc, __entry->online_vcpus, 951d828199eSMarcelo Tosatti __print_symbolic(__entry->host_clock, host_clocks)) 952d828199eSMarcelo Tosatti ); 953d828199eSMarcelo Tosatti 95454ad89b0SPaolo Bonzini #endif /* CONFIG_X86_64 */ 95554ad89b0SPaolo Bonzini 956843e4330SKai Huang /* 957843e4330SKai Huang * Tracepoint for PML full VMEXIT. 958843e4330SKai Huang */ 959843e4330SKai Huang TRACE_EVENT(kvm_pml_full, 960843e4330SKai Huang TP_PROTO(unsigned int vcpu_id), 961843e4330SKai Huang TP_ARGS(vcpu_id), 962843e4330SKai Huang 963843e4330SKai Huang TP_STRUCT__entry( 964843e4330SKai Huang __field( unsigned int, vcpu_id ) 965843e4330SKai Huang ), 966843e4330SKai Huang 967843e4330SKai Huang TP_fast_assign( 968843e4330SKai Huang __entry->vcpu_id = vcpu_id; 969843e4330SKai Huang ), 970843e4330SKai Huang 971843e4330SKai Huang TP_printk("vcpu %d: PML full", __entry->vcpu_id) 972843e4330SKai Huang ); 973843e4330SKai Huang 9744f75bcc3SPeter Xu TRACE_EVENT(kvm_ple_window_update, 9754f75bcc3SPeter Xu TP_PROTO(unsigned int vcpu_id, unsigned int new, unsigned int old), 9764f75bcc3SPeter Xu TP_ARGS(vcpu_id, new, old), 9777b46268dSRadim Krčmář 9787b46268dSRadim Krčmář TP_STRUCT__entry( 9797b46268dSRadim Krčmář __field( unsigned int, vcpu_id ) 980c5c5d6faSPeter Xu __field( unsigned int, new ) 981c5c5d6faSPeter Xu __field( unsigned int, old ) 9827b46268dSRadim Krčmář ), 9837b46268dSRadim Krčmář 9847b46268dSRadim Krčmář TP_fast_assign( 9857b46268dSRadim Krčmář __entry->vcpu_id = vcpu_id; 9867b46268dSRadim Krčmář __entry->new = new; 9877b46268dSRadim Krčmář __entry->old = old; 9887b46268dSRadim Krčmář ), 9897b46268dSRadim Krčmář 9904f75bcc3SPeter Xu TP_printk("vcpu %u old %u new %u (%s)", 9914f75bcc3SPeter Xu __entry->vcpu_id, __entry->old, __entry->new, 9924f75bcc3SPeter Xu __entry->old < __entry->new ? "growed" : "shrinked") 9937b46268dSRadim Krčmář ); 9947b46268dSRadim Krčmář 995ce1a5e60SDavid Matlack TRACE_EVENT(kvm_pvclock_update, 996ce1a5e60SDavid Matlack TP_PROTO(unsigned int vcpu_id, struct pvclock_vcpu_time_info *pvclock), 997ce1a5e60SDavid Matlack TP_ARGS(vcpu_id, pvclock), 998ce1a5e60SDavid Matlack 999ce1a5e60SDavid Matlack TP_STRUCT__entry( 1000ce1a5e60SDavid Matlack __field( unsigned int, vcpu_id ) 1001ce1a5e60SDavid Matlack __field( __u32, version ) 1002ce1a5e60SDavid Matlack __field( __u64, tsc_timestamp ) 1003ce1a5e60SDavid Matlack __field( __u64, system_time ) 1004ce1a5e60SDavid Matlack __field( __u32, tsc_to_system_mul ) 1005ce1a5e60SDavid Matlack __field( __s8, tsc_shift ) 1006ce1a5e60SDavid Matlack __field( __u8, flags ) 1007ce1a5e60SDavid Matlack ), 1008ce1a5e60SDavid Matlack 1009ce1a5e60SDavid Matlack TP_fast_assign( 1010ce1a5e60SDavid Matlack __entry->vcpu_id = vcpu_id; 1011ce1a5e60SDavid Matlack __entry->version = pvclock->version; 1012ce1a5e60SDavid Matlack __entry->tsc_timestamp = pvclock->tsc_timestamp; 1013ce1a5e60SDavid Matlack __entry->system_time = pvclock->system_time; 1014ce1a5e60SDavid Matlack __entry->tsc_to_system_mul = pvclock->tsc_to_system_mul; 1015ce1a5e60SDavid Matlack __entry->tsc_shift = pvclock->tsc_shift; 1016ce1a5e60SDavid Matlack __entry->flags = pvclock->flags; 1017ce1a5e60SDavid Matlack ), 1018ce1a5e60SDavid Matlack 1019ce1a5e60SDavid Matlack TP_printk("vcpu_id %u, pvclock { version %u, tsc_timestamp 0x%llx, " 1020ce1a5e60SDavid Matlack "system_time 0x%llx, tsc_to_system_mul 0x%x, tsc_shift %d, " 1021ce1a5e60SDavid Matlack "flags 0x%x }", 1022ce1a5e60SDavid Matlack __entry->vcpu_id, 1023ce1a5e60SDavid Matlack __entry->version, 1024ce1a5e60SDavid Matlack __entry->tsc_timestamp, 1025ce1a5e60SDavid Matlack __entry->system_time, 1026ce1a5e60SDavid Matlack __entry->tsc_to_system_mul, 1027ce1a5e60SDavid Matlack __entry->tsc_shift, 1028ce1a5e60SDavid Matlack __entry->flags) 1029ce1a5e60SDavid Matlack ); 1030ce1a5e60SDavid Matlack 10316c19b753SMarcelo Tosatti TRACE_EVENT(kvm_wait_lapic_expire, 10326c19b753SMarcelo Tosatti TP_PROTO(unsigned int vcpu_id, s64 delta), 10336c19b753SMarcelo Tosatti TP_ARGS(vcpu_id, delta), 10346c19b753SMarcelo Tosatti 10356c19b753SMarcelo Tosatti TP_STRUCT__entry( 10366c19b753SMarcelo Tosatti __field( unsigned int, vcpu_id ) 10376c19b753SMarcelo Tosatti __field( s64, delta ) 10386c19b753SMarcelo Tosatti ), 10396c19b753SMarcelo Tosatti 10406c19b753SMarcelo Tosatti TP_fast_assign( 10416c19b753SMarcelo Tosatti __entry->vcpu_id = vcpu_id; 10426c19b753SMarcelo Tosatti __entry->delta = delta; 10436c19b753SMarcelo Tosatti ), 10446c19b753SMarcelo Tosatti 10456c19b753SMarcelo Tosatti TP_printk("vcpu %u: delta %lld (%s)", 10466c19b753SMarcelo Tosatti __entry->vcpu_id, 10476c19b753SMarcelo Tosatti __entry->delta, 10486c19b753SMarcelo Tosatti __entry->delta < 0 ? "early" : "late") 10496c19b753SMarcelo Tosatti ); 10506c19b753SMarcelo Tosatti 10511270e647SSean Christopherson TRACE_EVENT(kvm_smm_transition, 1052660a5d51SPaolo Bonzini TP_PROTO(unsigned int vcpu_id, u64 smbase, bool entering), 1053660a5d51SPaolo Bonzini TP_ARGS(vcpu_id, smbase, entering), 1054660a5d51SPaolo Bonzini 1055660a5d51SPaolo Bonzini TP_STRUCT__entry( 1056660a5d51SPaolo Bonzini __field( unsigned int, vcpu_id ) 1057660a5d51SPaolo Bonzini __field( u64, smbase ) 1058660a5d51SPaolo Bonzini __field( bool, entering ) 1059660a5d51SPaolo Bonzini ), 1060660a5d51SPaolo Bonzini 1061660a5d51SPaolo Bonzini TP_fast_assign( 1062660a5d51SPaolo Bonzini __entry->vcpu_id = vcpu_id; 1063660a5d51SPaolo Bonzini __entry->smbase = smbase; 1064660a5d51SPaolo Bonzini __entry->entering = entering; 1065660a5d51SPaolo Bonzini ), 1066660a5d51SPaolo Bonzini 1067660a5d51SPaolo Bonzini TP_printk("vcpu %u: %s SMM, smbase 0x%llx", 1068660a5d51SPaolo Bonzini __entry->vcpu_id, 1069660a5d51SPaolo Bonzini __entry->entering ? "entering" : "leaving", 1070660a5d51SPaolo Bonzini __entry->smbase) 1071660a5d51SPaolo Bonzini ); 1072660a5d51SPaolo Bonzini 1073efc64404SFeng Wu /* 1074efc64404SFeng Wu * Tracepoint for VT-d posted-interrupts. 1075efc64404SFeng Wu */ 1076efc64404SFeng Wu TRACE_EVENT(kvm_pi_irte_update, 1077b6ce9780SFeng Wu TP_PROTO(unsigned int host_irq, unsigned int vcpu_id, 1078b6ce9780SFeng Wu unsigned int gsi, unsigned int gvec, 1079b6ce9780SFeng Wu u64 pi_desc_addr, bool set), 1080b6ce9780SFeng Wu TP_ARGS(host_irq, vcpu_id, gsi, gvec, pi_desc_addr, set), 1081efc64404SFeng Wu 1082efc64404SFeng Wu TP_STRUCT__entry( 1083b6ce9780SFeng Wu __field( unsigned int, host_irq ) 1084efc64404SFeng Wu __field( unsigned int, vcpu_id ) 1085efc64404SFeng Wu __field( unsigned int, gsi ) 1086efc64404SFeng Wu __field( unsigned int, gvec ) 1087efc64404SFeng Wu __field( u64, pi_desc_addr ) 1088efc64404SFeng Wu __field( bool, set ) 1089efc64404SFeng Wu ), 1090efc64404SFeng Wu 1091efc64404SFeng Wu TP_fast_assign( 1092b6ce9780SFeng Wu __entry->host_irq = host_irq; 1093efc64404SFeng Wu __entry->vcpu_id = vcpu_id; 1094efc64404SFeng Wu __entry->gsi = gsi; 1095efc64404SFeng Wu __entry->gvec = gvec; 1096efc64404SFeng Wu __entry->pi_desc_addr = pi_desc_addr; 1097efc64404SFeng Wu __entry->set = set; 1098efc64404SFeng Wu ), 1099efc64404SFeng Wu 1100b6ce9780SFeng Wu TP_printk("VT-d PI is %s for irq %u, vcpu %u, gsi: 0x%x, " 1101efc64404SFeng Wu "gvec: 0x%x, pi_desc_addr: 0x%llx", 1102efc64404SFeng Wu __entry->set ? "enabled and being updated" : "disabled", 1103b6ce9780SFeng Wu __entry->host_irq, 1104efc64404SFeng Wu __entry->vcpu_id, 1105efc64404SFeng Wu __entry->gsi, 1106efc64404SFeng Wu __entry->gvec, 1107efc64404SFeng Wu __entry->pi_desc_addr) 1108efc64404SFeng Wu ); 1109efc64404SFeng Wu 111018659a9cSAndrey Smetanin /* 111118659a9cSAndrey Smetanin * Tracepoint for kvm_hv_notify_acked_sint. 111218659a9cSAndrey Smetanin */ 111318659a9cSAndrey Smetanin TRACE_EVENT(kvm_hv_notify_acked_sint, 111418659a9cSAndrey Smetanin TP_PROTO(int vcpu_id, u32 sint), 111518659a9cSAndrey Smetanin TP_ARGS(vcpu_id, sint), 111618659a9cSAndrey Smetanin 111718659a9cSAndrey Smetanin TP_STRUCT__entry( 111818659a9cSAndrey Smetanin __field(int, vcpu_id) 111918659a9cSAndrey Smetanin __field(u32, sint) 112018659a9cSAndrey Smetanin ), 112118659a9cSAndrey Smetanin 112218659a9cSAndrey Smetanin TP_fast_assign( 112318659a9cSAndrey Smetanin __entry->vcpu_id = vcpu_id; 112418659a9cSAndrey Smetanin __entry->sint = sint; 112518659a9cSAndrey Smetanin ), 112618659a9cSAndrey Smetanin 112718659a9cSAndrey Smetanin TP_printk("vcpu_id %d sint %u", __entry->vcpu_id, __entry->sint) 112818659a9cSAndrey Smetanin ); 112918659a9cSAndrey Smetanin 113018659a9cSAndrey Smetanin /* 113118659a9cSAndrey Smetanin * Tracepoint for synic_set_irq. 113218659a9cSAndrey Smetanin */ 113318659a9cSAndrey Smetanin TRACE_EVENT(kvm_hv_synic_set_irq, 113418659a9cSAndrey Smetanin TP_PROTO(int vcpu_id, u32 sint, int vector, int ret), 113518659a9cSAndrey Smetanin TP_ARGS(vcpu_id, sint, vector, ret), 113618659a9cSAndrey Smetanin 113718659a9cSAndrey Smetanin TP_STRUCT__entry( 113818659a9cSAndrey Smetanin __field(int, vcpu_id) 113918659a9cSAndrey Smetanin __field(u32, sint) 114018659a9cSAndrey Smetanin __field(int, vector) 114118659a9cSAndrey Smetanin __field(int, ret) 114218659a9cSAndrey Smetanin ), 114318659a9cSAndrey Smetanin 114418659a9cSAndrey Smetanin TP_fast_assign( 114518659a9cSAndrey Smetanin __entry->vcpu_id = vcpu_id; 114618659a9cSAndrey Smetanin __entry->sint = sint; 114718659a9cSAndrey Smetanin __entry->vector = vector; 114818659a9cSAndrey Smetanin __entry->ret = ret; 114918659a9cSAndrey Smetanin ), 115018659a9cSAndrey Smetanin 115118659a9cSAndrey Smetanin TP_printk("vcpu_id %d sint %u vector %d ret %d", 115218659a9cSAndrey Smetanin __entry->vcpu_id, __entry->sint, __entry->vector, 115318659a9cSAndrey Smetanin __entry->ret) 115418659a9cSAndrey Smetanin ); 115518659a9cSAndrey Smetanin 115618659a9cSAndrey Smetanin /* 115718659a9cSAndrey Smetanin * Tracepoint for kvm_hv_synic_send_eoi. 115818659a9cSAndrey Smetanin */ 115918659a9cSAndrey Smetanin TRACE_EVENT(kvm_hv_synic_send_eoi, 116018659a9cSAndrey Smetanin TP_PROTO(int vcpu_id, int vector), 116118659a9cSAndrey Smetanin TP_ARGS(vcpu_id, vector), 116218659a9cSAndrey Smetanin 116318659a9cSAndrey Smetanin TP_STRUCT__entry( 116418659a9cSAndrey Smetanin __field(int, vcpu_id) 116518659a9cSAndrey Smetanin __field(u32, sint) 116618659a9cSAndrey Smetanin __field(int, vector) 116718659a9cSAndrey Smetanin __field(int, ret) 116818659a9cSAndrey Smetanin ), 116918659a9cSAndrey Smetanin 117018659a9cSAndrey Smetanin TP_fast_assign( 117118659a9cSAndrey Smetanin __entry->vcpu_id = vcpu_id; 117218659a9cSAndrey Smetanin __entry->vector = vector; 117318659a9cSAndrey Smetanin ), 117418659a9cSAndrey Smetanin 117518659a9cSAndrey Smetanin TP_printk("vcpu_id %d vector %d", __entry->vcpu_id, __entry->vector) 117618659a9cSAndrey Smetanin ); 117718659a9cSAndrey Smetanin 117818659a9cSAndrey Smetanin /* 117918659a9cSAndrey Smetanin * Tracepoint for synic_set_msr. 118018659a9cSAndrey Smetanin */ 118118659a9cSAndrey Smetanin TRACE_EVENT(kvm_hv_synic_set_msr, 118218659a9cSAndrey Smetanin TP_PROTO(int vcpu_id, u32 msr, u64 data, bool host), 118318659a9cSAndrey Smetanin TP_ARGS(vcpu_id, msr, data, host), 118418659a9cSAndrey Smetanin 118518659a9cSAndrey Smetanin TP_STRUCT__entry( 118618659a9cSAndrey Smetanin __field(int, vcpu_id) 118718659a9cSAndrey Smetanin __field(u32, msr) 118818659a9cSAndrey Smetanin __field(u64, data) 118918659a9cSAndrey Smetanin __field(bool, host) 119018659a9cSAndrey Smetanin ), 119118659a9cSAndrey Smetanin 119218659a9cSAndrey Smetanin TP_fast_assign( 119318659a9cSAndrey Smetanin __entry->vcpu_id = vcpu_id; 119418659a9cSAndrey Smetanin __entry->msr = msr; 119518659a9cSAndrey Smetanin __entry->data = data; 119618659a9cSAndrey Smetanin __entry->host = host 119718659a9cSAndrey Smetanin ), 119818659a9cSAndrey Smetanin 119918659a9cSAndrey Smetanin TP_printk("vcpu_id %d msr 0x%x data 0x%llx host %d", 120018659a9cSAndrey Smetanin __entry->vcpu_id, __entry->msr, __entry->data, __entry->host) 120118659a9cSAndrey Smetanin ); 120218659a9cSAndrey Smetanin 1203ac3e5fcaSAndrey Smetanin /* 1204ac3e5fcaSAndrey Smetanin * Tracepoint for stimer_set_config. 1205ac3e5fcaSAndrey Smetanin */ 1206ac3e5fcaSAndrey Smetanin TRACE_EVENT(kvm_hv_stimer_set_config, 1207ac3e5fcaSAndrey Smetanin TP_PROTO(int vcpu_id, int timer_index, u64 config, bool host), 1208ac3e5fcaSAndrey Smetanin TP_ARGS(vcpu_id, timer_index, config, host), 1209ac3e5fcaSAndrey Smetanin 1210ac3e5fcaSAndrey Smetanin TP_STRUCT__entry( 1211ac3e5fcaSAndrey Smetanin __field(int, vcpu_id) 1212ac3e5fcaSAndrey Smetanin __field(int, timer_index) 1213ac3e5fcaSAndrey Smetanin __field(u64, config) 1214ac3e5fcaSAndrey Smetanin __field(bool, host) 1215ac3e5fcaSAndrey Smetanin ), 1216ac3e5fcaSAndrey Smetanin 1217ac3e5fcaSAndrey Smetanin TP_fast_assign( 1218ac3e5fcaSAndrey Smetanin __entry->vcpu_id = vcpu_id; 1219ac3e5fcaSAndrey Smetanin __entry->timer_index = timer_index; 1220ac3e5fcaSAndrey Smetanin __entry->config = config; 1221ac3e5fcaSAndrey Smetanin __entry->host = host; 1222ac3e5fcaSAndrey Smetanin ), 1223ac3e5fcaSAndrey Smetanin 1224ac3e5fcaSAndrey Smetanin TP_printk("vcpu_id %d timer %d config 0x%llx host %d", 1225ac3e5fcaSAndrey Smetanin __entry->vcpu_id, __entry->timer_index, __entry->config, 1226ac3e5fcaSAndrey Smetanin __entry->host) 1227ac3e5fcaSAndrey Smetanin ); 1228ac3e5fcaSAndrey Smetanin 1229ac3e5fcaSAndrey Smetanin /* 1230ac3e5fcaSAndrey Smetanin * Tracepoint for stimer_set_count. 1231ac3e5fcaSAndrey Smetanin */ 1232ac3e5fcaSAndrey Smetanin TRACE_EVENT(kvm_hv_stimer_set_count, 1233ac3e5fcaSAndrey Smetanin TP_PROTO(int vcpu_id, int timer_index, u64 count, bool host), 1234ac3e5fcaSAndrey Smetanin TP_ARGS(vcpu_id, timer_index, count, host), 1235ac3e5fcaSAndrey Smetanin 1236ac3e5fcaSAndrey Smetanin TP_STRUCT__entry( 1237ac3e5fcaSAndrey Smetanin __field(int, vcpu_id) 1238ac3e5fcaSAndrey Smetanin __field(int, timer_index) 1239ac3e5fcaSAndrey Smetanin __field(u64, count) 1240ac3e5fcaSAndrey Smetanin __field(bool, host) 1241ac3e5fcaSAndrey Smetanin ), 1242ac3e5fcaSAndrey Smetanin 1243ac3e5fcaSAndrey Smetanin TP_fast_assign( 1244ac3e5fcaSAndrey Smetanin __entry->vcpu_id = vcpu_id; 1245ac3e5fcaSAndrey Smetanin __entry->timer_index = timer_index; 1246ac3e5fcaSAndrey Smetanin __entry->count = count; 1247ac3e5fcaSAndrey Smetanin __entry->host = host; 1248ac3e5fcaSAndrey Smetanin ), 1249ac3e5fcaSAndrey Smetanin 1250ac3e5fcaSAndrey Smetanin TP_printk("vcpu_id %d timer %d count %llu host %d", 1251ac3e5fcaSAndrey Smetanin __entry->vcpu_id, __entry->timer_index, __entry->count, 1252ac3e5fcaSAndrey Smetanin __entry->host) 1253ac3e5fcaSAndrey Smetanin ); 1254ac3e5fcaSAndrey Smetanin 1255ac3e5fcaSAndrey Smetanin /* 1256ac3e5fcaSAndrey Smetanin * Tracepoint for stimer_start(periodic timer case). 1257ac3e5fcaSAndrey Smetanin */ 1258ac3e5fcaSAndrey Smetanin TRACE_EVENT(kvm_hv_stimer_start_periodic, 1259ac3e5fcaSAndrey Smetanin TP_PROTO(int vcpu_id, int timer_index, u64 time_now, u64 exp_time), 1260ac3e5fcaSAndrey Smetanin TP_ARGS(vcpu_id, timer_index, time_now, exp_time), 1261ac3e5fcaSAndrey Smetanin 1262ac3e5fcaSAndrey Smetanin TP_STRUCT__entry( 1263ac3e5fcaSAndrey Smetanin __field(int, vcpu_id) 1264ac3e5fcaSAndrey Smetanin __field(int, timer_index) 1265ac3e5fcaSAndrey Smetanin __field(u64, time_now) 1266ac3e5fcaSAndrey Smetanin __field(u64, exp_time) 1267ac3e5fcaSAndrey Smetanin ), 1268ac3e5fcaSAndrey Smetanin 1269ac3e5fcaSAndrey Smetanin TP_fast_assign( 1270ac3e5fcaSAndrey Smetanin __entry->vcpu_id = vcpu_id; 1271ac3e5fcaSAndrey Smetanin __entry->timer_index = timer_index; 1272ac3e5fcaSAndrey Smetanin __entry->time_now = time_now; 1273ac3e5fcaSAndrey Smetanin __entry->exp_time = exp_time; 1274ac3e5fcaSAndrey Smetanin ), 1275ac3e5fcaSAndrey Smetanin 1276ac3e5fcaSAndrey Smetanin TP_printk("vcpu_id %d timer %d time_now %llu exp_time %llu", 1277ac3e5fcaSAndrey Smetanin __entry->vcpu_id, __entry->timer_index, __entry->time_now, 1278ac3e5fcaSAndrey Smetanin __entry->exp_time) 1279ac3e5fcaSAndrey Smetanin ); 1280ac3e5fcaSAndrey Smetanin 1281ac3e5fcaSAndrey Smetanin /* 1282ac3e5fcaSAndrey Smetanin * Tracepoint for stimer_start(one-shot timer case). 1283ac3e5fcaSAndrey Smetanin */ 1284ac3e5fcaSAndrey Smetanin TRACE_EVENT(kvm_hv_stimer_start_one_shot, 1285ac3e5fcaSAndrey Smetanin TP_PROTO(int vcpu_id, int timer_index, u64 time_now, u64 count), 1286ac3e5fcaSAndrey Smetanin TP_ARGS(vcpu_id, timer_index, time_now, count), 1287ac3e5fcaSAndrey Smetanin 1288ac3e5fcaSAndrey Smetanin TP_STRUCT__entry( 1289ac3e5fcaSAndrey Smetanin __field(int, vcpu_id) 1290ac3e5fcaSAndrey Smetanin __field(int, timer_index) 1291ac3e5fcaSAndrey Smetanin __field(u64, time_now) 1292ac3e5fcaSAndrey Smetanin __field(u64, count) 1293ac3e5fcaSAndrey Smetanin ), 1294ac3e5fcaSAndrey Smetanin 1295ac3e5fcaSAndrey Smetanin TP_fast_assign( 1296ac3e5fcaSAndrey Smetanin __entry->vcpu_id = vcpu_id; 1297ac3e5fcaSAndrey Smetanin __entry->timer_index = timer_index; 1298ac3e5fcaSAndrey Smetanin __entry->time_now = time_now; 1299ac3e5fcaSAndrey Smetanin __entry->count = count; 1300ac3e5fcaSAndrey Smetanin ), 1301ac3e5fcaSAndrey Smetanin 1302ac3e5fcaSAndrey Smetanin TP_printk("vcpu_id %d timer %d time_now %llu count %llu", 1303ac3e5fcaSAndrey Smetanin __entry->vcpu_id, __entry->timer_index, __entry->time_now, 1304ac3e5fcaSAndrey Smetanin __entry->count) 1305ac3e5fcaSAndrey Smetanin ); 1306ac3e5fcaSAndrey Smetanin 1307ac3e5fcaSAndrey Smetanin /* 1308ac3e5fcaSAndrey Smetanin * Tracepoint for stimer_timer_callback. 1309ac3e5fcaSAndrey Smetanin */ 1310ac3e5fcaSAndrey Smetanin TRACE_EVENT(kvm_hv_stimer_callback, 1311ac3e5fcaSAndrey Smetanin TP_PROTO(int vcpu_id, int timer_index), 1312ac3e5fcaSAndrey Smetanin TP_ARGS(vcpu_id, timer_index), 1313ac3e5fcaSAndrey Smetanin 1314ac3e5fcaSAndrey Smetanin TP_STRUCT__entry( 1315ac3e5fcaSAndrey Smetanin __field(int, vcpu_id) 1316ac3e5fcaSAndrey Smetanin __field(int, timer_index) 1317ac3e5fcaSAndrey Smetanin ), 1318ac3e5fcaSAndrey Smetanin 1319ac3e5fcaSAndrey Smetanin TP_fast_assign( 1320ac3e5fcaSAndrey Smetanin __entry->vcpu_id = vcpu_id; 1321ac3e5fcaSAndrey Smetanin __entry->timer_index = timer_index; 1322ac3e5fcaSAndrey Smetanin ), 1323ac3e5fcaSAndrey Smetanin 1324ac3e5fcaSAndrey Smetanin TP_printk("vcpu_id %d timer %d", 1325ac3e5fcaSAndrey Smetanin __entry->vcpu_id, __entry->timer_index) 1326ac3e5fcaSAndrey Smetanin ); 1327ac3e5fcaSAndrey Smetanin 1328ac3e5fcaSAndrey Smetanin /* 1329ac3e5fcaSAndrey Smetanin * Tracepoint for stimer_expiration. 1330ac3e5fcaSAndrey Smetanin */ 1331ac3e5fcaSAndrey Smetanin TRACE_EVENT(kvm_hv_stimer_expiration, 13328644f771SVitaly Kuznetsov TP_PROTO(int vcpu_id, int timer_index, int direct, int msg_send_result), 13338644f771SVitaly Kuznetsov TP_ARGS(vcpu_id, timer_index, direct, msg_send_result), 1334ac3e5fcaSAndrey Smetanin 1335ac3e5fcaSAndrey Smetanin TP_STRUCT__entry( 1336ac3e5fcaSAndrey Smetanin __field(int, vcpu_id) 1337ac3e5fcaSAndrey Smetanin __field(int, timer_index) 13388644f771SVitaly Kuznetsov __field(int, direct) 1339ac3e5fcaSAndrey Smetanin __field(int, msg_send_result) 1340ac3e5fcaSAndrey Smetanin ), 1341ac3e5fcaSAndrey Smetanin 1342ac3e5fcaSAndrey Smetanin TP_fast_assign( 1343ac3e5fcaSAndrey Smetanin __entry->vcpu_id = vcpu_id; 1344ac3e5fcaSAndrey Smetanin __entry->timer_index = timer_index; 13458644f771SVitaly Kuznetsov __entry->direct = direct; 1346ac3e5fcaSAndrey Smetanin __entry->msg_send_result = msg_send_result; 1347ac3e5fcaSAndrey Smetanin ), 1348ac3e5fcaSAndrey Smetanin 13498644f771SVitaly Kuznetsov TP_printk("vcpu_id %d timer %d direct %d send result %d", 1350ac3e5fcaSAndrey Smetanin __entry->vcpu_id, __entry->timer_index, 13518644f771SVitaly Kuznetsov __entry->direct, __entry->msg_send_result) 1352ac3e5fcaSAndrey Smetanin ); 1353ac3e5fcaSAndrey Smetanin 1354ac3e5fcaSAndrey Smetanin /* 1355ac3e5fcaSAndrey Smetanin * Tracepoint for stimer_cleanup. 1356ac3e5fcaSAndrey Smetanin */ 1357ac3e5fcaSAndrey Smetanin TRACE_EVENT(kvm_hv_stimer_cleanup, 1358ac3e5fcaSAndrey Smetanin TP_PROTO(int vcpu_id, int timer_index), 1359ac3e5fcaSAndrey Smetanin TP_ARGS(vcpu_id, timer_index), 1360ac3e5fcaSAndrey Smetanin 1361ac3e5fcaSAndrey Smetanin TP_STRUCT__entry( 1362ac3e5fcaSAndrey Smetanin __field(int, vcpu_id) 1363ac3e5fcaSAndrey Smetanin __field(int, timer_index) 1364ac3e5fcaSAndrey Smetanin ), 1365ac3e5fcaSAndrey Smetanin 1366ac3e5fcaSAndrey Smetanin TP_fast_assign( 1367ac3e5fcaSAndrey Smetanin __entry->vcpu_id = vcpu_id; 1368ac3e5fcaSAndrey Smetanin __entry->timer_index = timer_index; 1369ac3e5fcaSAndrey Smetanin ), 1370ac3e5fcaSAndrey Smetanin 1371ac3e5fcaSAndrey Smetanin TP_printk("vcpu_id %d timer %d", 1372ac3e5fcaSAndrey Smetanin __entry->vcpu_id, __entry->timer_index) 1373ac3e5fcaSAndrey Smetanin ); 1374ac3e5fcaSAndrey Smetanin 13754f4c4a3eSSean Christopherson TRACE_EVENT(kvm_apicv_inhibit_changed, 13764f4c4a3eSSean Christopherson TP_PROTO(int reason, bool set, unsigned long inhibits), 13774f4c4a3eSSean Christopherson TP_ARGS(reason, set, inhibits), 137824bbf74cSSuravee Suthikulpanit 137924bbf74cSSuravee Suthikulpanit TP_STRUCT__entry( 13807491b7b2SSean Christopherson __field(int, reason) 13814f4c4a3eSSean Christopherson __field(bool, set) 13824f4c4a3eSSean Christopherson __field(unsigned long, inhibits) 138324bbf74cSSuravee Suthikulpanit ), 138424bbf74cSSuravee Suthikulpanit 138524bbf74cSSuravee Suthikulpanit TP_fast_assign( 13867491b7b2SSean Christopherson __entry->reason = reason; 13874f4c4a3eSSean Christopherson __entry->set = set; 13884f4c4a3eSSean Christopherson __entry->inhibits = inhibits; 138924bbf74cSSuravee Suthikulpanit ), 139024bbf74cSSuravee Suthikulpanit 13914f4c4a3eSSean Christopherson TP_printk("%s reason=%u, inhibits=0x%lx", 13924f4c4a3eSSean Christopherson __entry->set ? "set" : "cleared", 13934f4c4a3eSSean Christopherson __entry->reason, __entry->inhibits) 139424bbf74cSSuravee Suthikulpanit ); 139524bbf74cSSuravee Suthikulpanit 13968e819d75SMaxim Levitsky TRACE_EVENT(kvm_apicv_accept_irq, 13978e819d75SMaxim Levitsky TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec), 13988e819d75SMaxim Levitsky TP_ARGS(apicid, dm, tm, vec), 13998e819d75SMaxim Levitsky 14008e819d75SMaxim Levitsky TP_STRUCT__entry( 14018e819d75SMaxim Levitsky __field( __u32, apicid ) 14028e819d75SMaxim Levitsky __field( __u16, dm ) 14038e819d75SMaxim Levitsky __field( __u16, tm ) 14048e819d75SMaxim Levitsky __field( __u8, vec ) 14058e819d75SMaxim Levitsky ), 14068e819d75SMaxim Levitsky 14078e819d75SMaxim Levitsky TP_fast_assign( 14088e819d75SMaxim Levitsky __entry->apicid = apicid; 14098e819d75SMaxim Levitsky __entry->dm = dm; 14108e819d75SMaxim Levitsky __entry->tm = tm; 14118e819d75SMaxim Levitsky __entry->vec = vec; 14128e819d75SMaxim Levitsky ), 14138e819d75SMaxim Levitsky 14148e819d75SMaxim Levitsky TP_printk("apicid %x vec %u (%s|%s)", 14158e819d75SMaxim Levitsky __entry->apicid, __entry->vec, 14168e819d75SMaxim Levitsky __print_symbolic((__entry->dm >> 8 & 0x7), kvm_deliver_mode), 14178e819d75SMaxim Levitsky __entry->tm ? "level" : "edge") 14188e819d75SMaxim Levitsky ); 14198e819d75SMaxim Levitsky 142018f40c53SSuravee Suthikulpanit /* 142118f40c53SSuravee Suthikulpanit * Tracepoint for AMD AVIC 142218f40c53SSuravee Suthikulpanit */ 142318f40c53SSuravee Suthikulpanit TRACE_EVENT(kvm_avic_incomplete_ipi, 142418f40c53SSuravee Suthikulpanit TP_PROTO(u32 vcpu, u32 icrh, u32 icrl, u32 id, u32 index), 142518f40c53SSuravee Suthikulpanit TP_ARGS(vcpu, icrh, icrl, id, index), 142618f40c53SSuravee Suthikulpanit 142718f40c53SSuravee Suthikulpanit TP_STRUCT__entry( 142818f40c53SSuravee Suthikulpanit __field(u32, vcpu) 142918f40c53SSuravee Suthikulpanit __field(u32, icrh) 143018f40c53SSuravee Suthikulpanit __field(u32, icrl) 143118f40c53SSuravee Suthikulpanit __field(u32, id) 143218f40c53SSuravee Suthikulpanit __field(u32, index) 143318f40c53SSuravee Suthikulpanit ), 143418f40c53SSuravee Suthikulpanit 143518f40c53SSuravee Suthikulpanit TP_fast_assign( 143618f40c53SSuravee Suthikulpanit __entry->vcpu = vcpu; 143718f40c53SSuravee Suthikulpanit __entry->icrh = icrh; 143818f40c53SSuravee Suthikulpanit __entry->icrl = icrl; 143918f40c53SSuravee Suthikulpanit __entry->id = id; 144018f40c53SSuravee Suthikulpanit __entry->index = index; 144118f40c53SSuravee Suthikulpanit ), 144218f40c53SSuravee Suthikulpanit 144313a7e370SPeter Xu TP_printk("vcpu=%u, icrh:icrl=%#010x:%08x, id=%u, index=%u", 144418f40c53SSuravee Suthikulpanit __entry->vcpu, __entry->icrh, __entry->icrl, 144518f40c53SSuravee Suthikulpanit __entry->id, __entry->index) 144618f40c53SSuravee Suthikulpanit ); 144718f40c53SSuravee Suthikulpanit 144818f40c53SSuravee Suthikulpanit TRACE_EVENT(kvm_avic_unaccelerated_access, 144918f40c53SSuravee Suthikulpanit TP_PROTO(u32 vcpu, u32 offset, bool ft, bool rw, u32 vec), 145018f40c53SSuravee Suthikulpanit TP_ARGS(vcpu, offset, ft, rw, vec), 145118f40c53SSuravee Suthikulpanit 145218f40c53SSuravee Suthikulpanit TP_STRUCT__entry( 145318f40c53SSuravee Suthikulpanit __field(u32, vcpu) 145418f40c53SSuravee Suthikulpanit __field(u32, offset) 145518f40c53SSuravee Suthikulpanit __field(bool, ft) 145618f40c53SSuravee Suthikulpanit __field(bool, rw) 145718f40c53SSuravee Suthikulpanit __field(u32, vec) 145818f40c53SSuravee Suthikulpanit ), 145918f40c53SSuravee Suthikulpanit 146018f40c53SSuravee Suthikulpanit TP_fast_assign( 146118f40c53SSuravee Suthikulpanit __entry->vcpu = vcpu; 146218f40c53SSuravee Suthikulpanit __entry->offset = offset; 146318f40c53SSuravee Suthikulpanit __entry->ft = ft; 146418f40c53SSuravee Suthikulpanit __entry->rw = rw; 146518f40c53SSuravee Suthikulpanit __entry->vec = vec; 146618f40c53SSuravee Suthikulpanit ), 146718f40c53SSuravee Suthikulpanit 146813a7e370SPeter Xu TP_printk("vcpu=%u, offset=%#x(%s), %s, %s, vec=%#x", 146918f40c53SSuravee Suthikulpanit __entry->vcpu, 147018f40c53SSuravee Suthikulpanit __entry->offset, 147118f40c53SSuravee Suthikulpanit __print_symbolic(__entry->offset, kvm_trace_symbol_apic), 147218f40c53SSuravee Suthikulpanit __entry->ft ? "trap" : "fault", 147318f40c53SSuravee Suthikulpanit __entry->rw ? "write" : "read", 147418f40c53SSuravee Suthikulpanit __entry->vec) 147518f40c53SSuravee Suthikulpanit ); 147618f40c53SSuravee Suthikulpanit 1477ab56f8e6SSuravee Suthikulpanit TRACE_EVENT(kvm_avic_ga_log, 1478ab56f8e6SSuravee Suthikulpanit TP_PROTO(u32 vmid, u32 vcpuid), 1479ab56f8e6SSuravee Suthikulpanit TP_ARGS(vmid, vcpuid), 1480ab56f8e6SSuravee Suthikulpanit 1481ab56f8e6SSuravee Suthikulpanit TP_STRUCT__entry( 1482ab56f8e6SSuravee Suthikulpanit __field(u32, vmid) 1483ab56f8e6SSuravee Suthikulpanit __field(u32, vcpuid) 1484ab56f8e6SSuravee Suthikulpanit ), 1485ab56f8e6SSuravee Suthikulpanit 1486ab56f8e6SSuravee Suthikulpanit TP_fast_assign( 1487ab56f8e6SSuravee Suthikulpanit __entry->vmid = vmid; 1488ab56f8e6SSuravee Suthikulpanit __entry->vcpuid = vcpuid; 1489ab56f8e6SSuravee Suthikulpanit ), 1490ab56f8e6SSuravee Suthikulpanit 1491ab56f8e6SSuravee Suthikulpanit TP_printk("vmid=%u, vcpuid=%u", 1492ab56f8e6SSuravee Suthikulpanit __entry->vmid, __entry->vcpuid) 1493ab56f8e6SSuravee Suthikulpanit ); 1494ab56f8e6SSuravee Suthikulpanit 14959f084f7cSSuravee Suthikulpanit TRACE_EVENT(kvm_avic_kick_vcpu_slowpath, 14969f084f7cSSuravee Suthikulpanit TP_PROTO(u32 icrh, u32 icrl, u32 index), 14979f084f7cSSuravee Suthikulpanit TP_ARGS(icrh, icrl, index), 14989f084f7cSSuravee Suthikulpanit 14999f084f7cSSuravee Suthikulpanit TP_STRUCT__entry( 15009f084f7cSSuravee Suthikulpanit __field(u32, icrh) 15019f084f7cSSuravee Suthikulpanit __field(u32, icrl) 15029f084f7cSSuravee Suthikulpanit __field(u32, index) 15039f084f7cSSuravee Suthikulpanit ), 15049f084f7cSSuravee Suthikulpanit 15059f084f7cSSuravee Suthikulpanit TP_fast_assign( 15069f084f7cSSuravee Suthikulpanit __entry->icrh = icrh; 15079f084f7cSSuravee Suthikulpanit __entry->icrl = icrl; 15089f084f7cSSuravee Suthikulpanit __entry->index = index; 15099f084f7cSSuravee Suthikulpanit ), 15109f084f7cSSuravee Suthikulpanit 15119f084f7cSSuravee Suthikulpanit TP_printk("icrh:icrl=%#08x:%08x, index=%u", 15129f084f7cSSuravee Suthikulpanit __entry->icrh, __entry->icrl, __entry->index) 15139f084f7cSSuravee Suthikulpanit ); 15149f084f7cSSuravee Suthikulpanit 151539b6b8c3SSuravee Suthikulpanit TRACE_EVENT(kvm_avic_doorbell, 151639b6b8c3SSuravee Suthikulpanit TP_PROTO(u32 vcpuid, u32 apicid), 151739b6b8c3SSuravee Suthikulpanit TP_ARGS(vcpuid, apicid), 151839b6b8c3SSuravee Suthikulpanit 151939b6b8c3SSuravee Suthikulpanit TP_STRUCT__entry( 152039b6b8c3SSuravee Suthikulpanit __field(u32, vcpuid) 152139b6b8c3SSuravee Suthikulpanit __field(u32, apicid) 152239b6b8c3SSuravee Suthikulpanit ), 152339b6b8c3SSuravee Suthikulpanit 152439b6b8c3SSuravee Suthikulpanit TP_fast_assign( 152539b6b8c3SSuravee Suthikulpanit __entry->vcpuid = vcpuid; 152639b6b8c3SSuravee Suthikulpanit __entry->apicid = apicid; 152739b6b8c3SSuravee Suthikulpanit ), 152839b6b8c3SSuravee Suthikulpanit 152939b6b8c3SSuravee Suthikulpanit TP_printk("vcpuid=%u, apicid=%u", 153039b6b8c3SSuravee Suthikulpanit __entry->vcpuid, __entry->apicid) 153139b6b8c3SSuravee Suthikulpanit ); 153239b6b8c3SSuravee Suthikulpanit 1533ce7a058aSYunhong Jiang TRACE_EVENT(kvm_hv_timer_state, 1534ce7a058aSYunhong Jiang TP_PROTO(unsigned int vcpu_id, unsigned int hv_timer_in_use), 1535ce7a058aSYunhong Jiang TP_ARGS(vcpu_id, hv_timer_in_use), 1536ce7a058aSYunhong Jiang TP_STRUCT__entry( 1537ce7a058aSYunhong Jiang __field(unsigned int, vcpu_id) 1538ce7a058aSYunhong Jiang __field(unsigned int, hv_timer_in_use) 1539ce7a058aSYunhong Jiang ), 1540ce7a058aSYunhong Jiang TP_fast_assign( 1541ce7a058aSYunhong Jiang __entry->vcpu_id = vcpu_id; 1542ce7a058aSYunhong Jiang __entry->hv_timer_in_use = hv_timer_in_use; 1543ce7a058aSYunhong Jiang ), 15447be373b6SWanpeng Li TP_printk("vcpu_id %x hv_timer %x", 1545ce7a058aSYunhong Jiang __entry->vcpu_id, 1546ce7a058aSYunhong Jiang __entry->hv_timer_in_use) 1547ce7a058aSYunhong Jiang ); 1548e2f11f42SVitaly Kuznetsov 1549e2f11f42SVitaly Kuznetsov /* 1550e2f11f42SVitaly Kuznetsov * Tracepoint for kvm_hv_flush_tlb. 1551e2f11f42SVitaly Kuznetsov */ 1552e2f11f42SVitaly Kuznetsov TRACE_EVENT(kvm_hv_flush_tlb, 1553c58a318fSVitaly Kuznetsov TP_PROTO(u64 processor_mask, u64 address_space, u64 flags, bool guest_mode), 1554c58a318fSVitaly Kuznetsov TP_ARGS(processor_mask, address_space, flags, guest_mode), 1555e2f11f42SVitaly Kuznetsov 1556e2f11f42SVitaly Kuznetsov TP_STRUCT__entry( 1557e2f11f42SVitaly Kuznetsov __field(u64, processor_mask) 1558e2f11f42SVitaly Kuznetsov __field(u64, address_space) 1559e2f11f42SVitaly Kuznetsov __field(u64, flags) 1560c58a318fSVitaly Kuznetsov __field(bool, guest_mode) 1561e2f11f42SVitaly Kuznetsov ), 1562e2f11f42SVitaly Kuznetsov 1563e2f11f42SVitaly Kuznetsov TP_fast_assign( 1564e2f11f42SVitaly Kuznetsov __entry->processor_mask = processor_mask; 1565e2f11f42SVitaly Kuznetsov __entry->address_space = address_space; 1566e2f11f42SVitaly Kuznetsov __entry->flags = flags; 1567c58a318fSVitaly Kuznetsov __entry->guest_mode = guest_mode; 1568e2f11f42SVitaly Kuznetsov ), 1569e2f11f42SVitaly Kuznetsov 1570c58a318fSVitaly Kuznetsov TP_printk("processor_mask 0x%llx address_space 0x%llx flags 0x%llx %s", 1571e2f11f42SVitaly Kuznetsov __entry->processor_mask, __entry->address_space, 1572c58a318fSVitaly Kuznetsov __entry->flags, __entry->guest_mode ? "(L2)" : "") 1573e2f11f42SVitaly Kuznetsov ); 1574c7012676SVitaly Kuznetsov 1575c7012676SVitaly Kuznetsov /* 1576c7012676SVitaly Kuznetsov * Tracepoint for kvm_hv_flush_tlb_ex. 1577c7012676SVitaly Kuznetsov */ 1578c7012676SVitaly Kuznetsov TRACE_EVENT(kvm_hv_flush_tlb_ex, 1579c58a318fSVitaly Kuznetsov TP_PROTO(u64 valid_bank_mask, u64 format, u64 address_space, u64 flags, bool guest_mode), 1580c58a318fSVitaly Kuznetsov TP_ARGS(valid_bank_mask, format, address_space, flags, guest_mode), 1581c7012676SVitaly Kuznetsov 1582c7012676SVitaly Kuznetsov TP_STRUCT__entry( 1583c7012676SVitaly Kuznetsov __field(u64, valid_bank_mask) 1584c7012676SVitaly Kuznetsov __field(u64, format) 1585c7012676SVitaly Kuznetsov __field(u64, address_space) 1586c7012676SVitaly Kuznetsov __field(u64, flags) 1587c58a318fSVitaly Kuznetsov __field(bool, guest_mode) 1588c7012676SVitaly Kuznetsov ), 1589c7012676SVitaly Kuznetsov 1590c7012676SVitaly Kuznetsov TP_fast_assign( 1591c7012676SVitaly Kuznetsov __entry->valid_bank_mask = valid_bank_mask; 1592c7012676SVitaly Kuznetsov __entry->format = format; 1593c7012676SVitaly Kuznetsov __entry->address_space = address_space; 1594c7012676SVitaly Kuznetsov __entry->flags = flags; 1595c58a318fSVitaly Kuznetsov __entry->guest_mode = guest_mode; 1596c7012676SVitaly Kuznetsov ), 1597c7012676SVitaly Kuznetsov 1598c7012676SVitaly Kuznetsov TP_printk("valid_bank_mask 0x%llx format 0x%llx " 1599c58a318fSVitaly Kuznetsov "address_space 0x%llx flags 0x%llx %s", 1600c7012676SVitaly Kuznetsov __entry->valid_bank_mask, __entry->format, 1601c58a318fSVitaly Kuznetsov __entry->address_space, __entry->flags, 1602c58a318fSVitaly Kuznetsov __entry->guest_mode ? "(L2)" : "") 1603c7012676SVitaly Kuznetsov ); 1604214ff83dSVitaly Kuznetsov 1605214ff83dSVitaly Kuznetsov /* 1606214ff83dSVitaly Kuznetsov * Tracepoints for kvm_hv_send_ipi. 1607214ff83dSVitaly Kuznetsov */ 1608214ff83dSVitaly Kuznetsov TRACE_EVENT(kvm_hv_send_ipi, 1609214ff83dSVitaly Kuznetsov TP_PROTO(u32 vector, u64 processor_mask), 1610214ff83dSVitaly Kuznetsov TP_ARGS(vector, processor_mask), 1611214ff83dSVitaly Kuznetsov 1612214ff83dSVitaly Kuznetsov TP_STRUCT__entry( 1613214ff83dSVitaly Kuznetsov __field(u32, vector) 1614214ff83dSVitaly Kuznetsov __field(u64, processor_mask) 1615214ff83dSVitaly Kuznetsov ), 1616214ff83dSVitaly Kuznetsov 1617214ff83dSVitaly Kuznetsov TP_fast_assign( 1618214ff83dSVitaly Kuznetsov __entry->vector = vector; 1619214ff83dSVitaly Kuznetsov __entry->processor_mask = processor_mask; 1620214ff83dSVitaly Kuznetsov ), 1621214ff83dSVitaly Kuznetsov 1622214ff83dSVitaly Kuznetsov TP_printk("vector %x processor_mask 0x%llx", 1623214ff83dSVitaly Kuznetsov __entry->vector, __entry->processor_mask) 1624214ff83dSVitaly Kuznetsov ); 1625214ff83dSVitaly Kuznetsov 1626214ff83dSVitaly Kuznetsov TRACE_EVENT(kvm_hv_send_ipi_ex, 1627214ff83dSVitaly Kuznetsov TP_PROTO(u32 vector, u64 format, u64 valid_bank_mask), 1628214ff83dSVitaly Kuznetsov TP_ARGS(vector, format, valid_bank_mask), 1629214ff83dSVitaly Kuznetsov 1630214ff83dSVitaly Kuznetsov TP_STRUCT__entry( 1631214ff83dSVitaly Kuznetsov __field(u32, vector) 1632214ff83dSVitaly Kuznetsov __field(u64, format) 1633214ff83dSVitaly Kuznetsov __field(u64, valid_bank_mask) 1634214ff83dSVitaly Kuznetsov ), 1635214ff83dSVitaly Kuznetsov 1636214ff83dSVitaly Kuznetsov TP_fast_assign( 1637214ff83dSVitaly Kuznetsov __entry->vector = vector; 1638214ff83dSVitaly Kuznetsov __entry->format = format; 1639214ff83dSVitaly Kuznetsov __entry->valid_bank_mask = valid_bank_mask; 1640214ff83dSVitaly Kuznetsov ), 1641214ff83dSVitaly Kuznetsov 1642214ff83dSVitaly Kuznetsov TP_printk("vector %x format %llx valid_bank_mask 0x%llx", 1643214ff83dSVitaly Kuznetsov __entry->vector, __entry->format, 1644214ff83dSVitaly Kuznetsov __entry->valid_bank_mask) 1645214ff83dSVitaly Kuznetsov ); 1646b382f44eSWanpeng Li 1647b382f44eSWanpeng Li TRACE_EVENT(kvm_pv_tlb_flush, 1648b382f44eSWanpeng Li TP_PROTO(unsigned int vcpu_id, bool need_flush_tlb), 1649b382f44eSWanpeng Li TP_ARGS(vcpu_id, need_flush_tlb), 1650b382f44eSWanpeng Li 1651b382f44eSWanpeng Li TP_STRUCT__entry( 1652b382f44eSWanpeng Li __field( unsigned int, vcpu_id ) 1653b382f44eSWanpeng Li __field( bool, need_flush_tlb ) 1654b382f44eSWanpeng Li ), 1655b382f44eSWanpeng Li 1656b382f44eSWanpeng Li TP_fast_assign( 1657b382f44eSWanpeng Li __entry->vcpu_id = vcpu_id; 1658b382f44eSWanpeng Li __entry->need_flush_tlb = need_flush_tlb; 1659b382f44eSWanpeng Li ), 1660b382f44eSWanpeng Li 1661b382f44eSWanpeng Li TP_printk("vcpu %u need_flush_tlb %s", __entry->vcpu_id, 1662b382f44eSWanpeng Li __entry->need_flush_tlb ? "true" : "false") 1663b382f44eSWanpeng Li ); 1664b382f44eSWanpeng Li 16655497b955SSean Christopherson /* 16665497b955SSean Christopherson * Tracepoint for failed nested VMX VM-Enter. 16675497b955SSean Christopherson */ 16685497b955SSean Christopherson TRACE_EVENT(kvm_nested_vmenter_failed, 1669380e0055SSean Christopherson TP_PROTO(const char *msg, u32 err), 1670380e0055SSean Christopherson TP_ARGS(msg, err), 16715497b955SSean Christopherson 16725497b955SSean Christopherson TP_STRUCT__entry( 1673f31500b0SSean Christopherson __string(msg, msg) 1674380e0055SSean Christopherson __field(u32, err) 16755497b955SSean Christopherson ), 16765497b955SSean Christopherson 16775497b955SSean Christopherson TP_fast_assign( 1678f31500b0SSean Christopherson __assign_str(msg, msg); 1679380e0055SSean Christopherson __entry->err = err; 16805497b955SSean Christopherson ), 16815497b955SSean Christopherson 1682f31500b0SSean Christopherson TP_printk("%s%s", __get_str(msg), !__entry->err ? "" : 1683380e0055SSean Christopherson __print_symbolic(__entry->err, VMX_VMENTER_INSTRUCTION_ERRORS)) 16845497b955SSean Christopherson ); 16855497b955SSean Christopherson 1686f97f5a56SJon Doron /* 1687f97f5a56SJon Doron * Tracepoint for syndbg_set_msr. 1688f97f5a56SJon Doron */ 1689f97f5a56SJon Doron TRACE_EVENT(kvm_hv_syndbg_set_msr, 1690f97f5a56SJon Doron TP_PROTO(int vcpu_id, u32 vp_index, u32 msr, u64 data), 1691f97f5a56SJon Doron TP_ARGS(vcpu_id, vp_index, msr, data), 1692f97f5a56SJon Doron 1693f97f5a56SJon Doron TP_STRUCT__entry( 1694f97f5a56SJon Doron __field(int, vcpu_id) 1695f97f5a56SJon Doron __field(u32, vp_index) 1696f97f5a56SJon Doron __field(u32, msr) 1697f97f5a56SJon Doron __field(u64, data) 1698f97f5a56SJon Doron ), 1699f97f5a56SJon Doron 1700f97f5a56SJon Doron TP_fast_assign( 1701f97f5a56SJon Doron __entry->vcpu_id = vcpu_id; 1702f97f5a56SJon Doron __entry->vp_index = vp_index; 1703f97f5a56SJon Doron __entry->msr = msr; 1704f97f5a56SJon Doron __entry->data = data; 1705f97f5a56SJon Doron ), 1706f97f5a56SJon Doron 1707f97f5a56SJon Doron TP_printk("vcpu_id %d vp_index %u msr 0x%x data 0x%llx", 1708f97f5a56SJon Doron __entry->vcpu_id, __entry->vp_index, __entry->msr, 1709f97f5a56SJon Doron __entry->data) 1710f97f5a56SJon Doron ); 1711f97f5a56SJon Doron 1712f97f5a56SJon Doron /* 1713f97f5a56SJon Doron * Tracepoint for syndbg_get_msr. 1714f97f5a56SJon Doron */ 1715f97f5a56SJon Doron TRACE_EVENT(kvm_hv_syndbg_get_msr, 1716f97f5a56SJon Doron TP_PROTO(int vcpu_id, u32 vp_index, u32 msr, u64 data), 1717f97f5a56SJon Doron TP_ARGS(vcpu_id, vp_index, msr, data), 1718f97f5a56SJon Doron 1719f97f5a56SJon Doron TP_STRUCT__entry( 1720f97f5a56SJon Doron __field(int, vcpu_id) 1721f97f5a56SJon Doron __field(u32, vp_index) 1722f97f5a56SJon Doron __field(u32, msr) 1723f97f5a56SJon Doron __field(u64, data) 1724f97f5a56SJon Doron ), 1725f97f5a56SJon Doron 1726f97f5a56SJon Doron TP_fast_assign( 1727f97f5a56SJon Doron __entry->vcpu_id = vcpu_id; 1728f97f5a56SJon Doron __entry->vp_index = vp_index; 1729f97f5a56SJon Doron __entry->msr = msr; 1730f97f5a56SJon Doron __entry->data = data; 1731f97f5a56SJon Doron ), 1732f97f5a56SJon Doron 1733f97f5a56SJon Doron TP_printk("vcpu_id %d vp_index %u msr 0x%x data 0x%llx", 1734f97f5a56SJon Doron __entry->vcpu_id, __entry->vp_index, __entry->msr, 1735f97f5a56SJon Doron __entry->data) 1736f97f5a56SJon Doron ); 1737d523ab6bSTom Lendacky 1738d523ab6bSTom Lendacky /* 1739d523ab6bSTom Lendacky * Tracepoint for the start of VMGEXIT processing 1740d523ab6bSTom Lendacky */ 1741d523ab6bSTom Lendacky TRACE_EVENT(kvm_vmgexit_enter, 1742d523ab6bSTom Lendacky TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 1743d523ab6bSTom Lendacky TP_ARGS(vcpu_id, ghcb), 1744d523ab6bSTom Lendacky 1745d523ab6bSTom Lendacky TP_STRUCT__entry( 1746d523ab6bSTom Lendacky __field(unsigned int, vcpu_id) 1747d523ab6bSTom Lendacky __field(u64, exit_reason) 1748d523ab6bSTom Lendacky __field(u64, info1) 1749d523ab6bSTom Lendacky __field(u64, info2) 1750d523ab6bSTom Lendacky ), 1751d523ab6bSTom Lendacky 1752d523ab6bSTom Lendacky TP_fast_assign( 1753d523ab6bSTom Lendacky __entry->vcpu_id = vcpu_id; 1754d523ab6bSTom Lendacky __entry->exit_reason = ghcb->save.sw_exit_code; 1755d523ab6bSTom Lendacky __entry->info1 = ghcb->save.sw_exit_info_1; 1756d523ab6bSTom Lendacky __entry->info2 = ghcb->save.sw_exit_info_2; 1757d523ab6bSTom Lendacky ), 1758d523ab6bSTom Lendacky 1759d523ab6bSTom Lendacky TP_printk("vcpu %u, exit_reason %llx, exit_info1 %llx, exit_info2 %llx", 1760d523ab6bSTom Lendacky __entry->vcpu_id, __entry->exit_reason, 1761d523ab6bSTom Lendacky __entry->info1, __entry->info2) 1762d523ab6bSTom Lendacky ); 1763d523ab6bSTom Lendacky 1764d523ab6bSTom Lendacky /* 1765d523ab6bSTom Lendacky * Tracepoint for the end of VMGEXIT processing 1766d523ab6bSTom Lendacky */ 1767d523ab6bSTom Lendacky TRACE_EVENT(kvm_vmgexit_exit, 1768d523ab6bSTom Lendacky TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 1769d523ab6bSTom Lendacky TP_ARGS(vcpu_id, ghcb), 1770d523ab6bSTom Lendacky 1771d523ab6bSTom Lendacky TP_STRUCT__entry( 1772d523ab6bSTom Lendacky __field(unsigned int, vcpu_id) 1773d523ab6bSTom Lendacky __field(u64, exit_reason) 1774d523ab6bSTom Lendacky __field(u64, info1) 1775d523ab6bSTom Lendacky __field(u64, info2) 1776d523ab6bSTom Lendacky ), 1777d523ab6bSTom Lendacky 1778d523ab6bSTom Lendacky TP_fast_assign( 1779d523ab6bSTom Lendacky __entry->vcpu_id = vcpu_id; 1780d523ab6bSTom Lendacky __entry->exit_reason = ghcb->save.sw_exit_code; 1781d523ab6bSTom Lendacky __entry->info1 = ghcb->save.sw_exit_info_1; 1782d523ab6bSTom Lendacky __entry->info2 = ghcb->save.sw_exit_info_2; 1783d523ab6bSTom Lendacky ), 1784d523ab6bSTom Lendacky 1785d523ab6bSTom Lendacky TP_printk("vcpu %u, exit_reason %llx, exit_info1 %llx, exit_info2 %llx", 1786d523ab6bSTom Lendacky __entry->vcpu_id, __entry->exit_reason, 1787d523ab6bSTom Lendacky __entry->info1, __entry->info2) 1788d523ab6bSTom Lendacky ); 1789d523ab6bSTom Lendacky 179059e38b58STom Lendacky /* 179159e38b58STom Lendacky * Tracepoint for the start of VMGEXIT MSR procotol processing 179259e38b58STom Lendacky */ 179359e38b58STom Lendacky TRACE_EVENT(kvm_vmgexit_msr_protocol_enter, 179459e38b58STom Lendacky TP_PROTO(unsigned int vcpu_id, u64 ghcb_gpa), 179559e38b58STom Lendacky TP_ARGS(vcpu_id, ghcb_gpa), 179659e38b58STom Lendacky 179759e38b58STom Lendacky TP_STRUCT__entry( 179859e38b58STom Lendacky __field(unsigned int, vcpu_id) 179959e38b58STom Lendacky __field(u64, ghcb_gpa) 180059e38b58STom Lendacky ), 180159e38b58STom Lendacky 180259e38b58STom Lendacky TP_fast_assign( 180359e38b58STom Lendacky __entry->vcpu_id = vcpu_id; 180459e38b58STom Lendacky __entry->ghcb_gpa = ghcb_gpa; 180559e38b58STom Lendacky ), 180659e38b58STom Lendacky 180759e38b58STom Lendacky TP_printk("vcpu %u, ghcb_gpa %016llx", 180859e38b58STom Lendacky __entry->vcpu_id, __entry->ghcb_gpa) 180959e38b58STom Lendacky ); 181059e38b58STom Lendacky 181159e38b58STom Lendacky /* 181259e38b58STom Lendacky * Tracepoint for the end of VMGEXIT MSR procotol processing 181359e38b58STom Lendacky */ 181459e38b58STom Lendacky TRACE_EVENT(kvm_vmgexit_msr_protocol_exit, 181559e38b58STom Lendacky TP_PROTO(unsigned int vcpu_id, u64 ghcb_gpa, int result), 181659e38b58STom Lendacky TP_ARGS(vcpu_id, ghcb_gpa, result), 181759e38b58STom Lendacky 181859e38b58STom Lendacky TP_STRUCT__entry( 181959e38b58STom Lendacky __field(unsigned int, vcpu_id) 182059e38b58STom Lendacky __field(u64, ghcb_gpa) 182159e38b58STom Lendacky __field(int, result) 182259e38b58STom Lendacky ), 182359e38b58STom Lendacky 182459e38b58STom Lendacky TP_fast_assign( 182559e38b58STom Lendacky __entry->vcpu_id = vcpu_id; 182659e38b58STom Lendacky __entry->ghcb_gpa = ghcb_gpa; 182759e38b58STom Lendacky __entry->result = result; 182859e38b58STom Lendacky ), 182959e38b58STom Lendacky 183059e38b58STom Lendacky TP_printk("vcpu %u, ghcb_gpa %016llx, result %d", 183159e38b58STom Lendacky __entry->vcpu_id, __entry->ghcb_gpa, __entry->result) 183259e38b58STom Lendacky ); 183359e38b58STom Lendacky 1834229456fcSMarcelo Tosatti #endif /* _TRACE_KVM_H */ 1835229456fcSMarcelo Tosatti 18362ed152afSXiao Guangrong #undef TRACE_INCLUDE_PATH 18375cd5548fSMasahiro Yamada #define TRACE_INCLUDE_PATH ../../arch/x86/kvm 18382ed152afSXiao Guangrong #undef TRACE_INCLUDE_FILE 18392ed152afSXiao Guangrong #define TRACE_INCLUDE_FILE trace 18402ed152afSXiao Guangrong 1841229456fcSMarcelo Tosatti /* This part must be outside protection */ 1842229456fcSMarcelo Tosatti #include <trace/define_trace.h> 1843