1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2020-2023 Loongson Technology Corporation Limited 4 */ 5 6 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) 7 #define _TRACE_KVM_H 8 9 #include <linux/tracepoint.h> 10 #include <asm/kvm_csr.h> 11 12 #undef TRACE_SYSTEM 13 #define TRACE_SYSTEM kvm 14 15 /* 16 * Tracepoints for VM enters 17 */ 18 DECLARE_EVENT_CLASS(kvm_transition, 19 TP_PROTO(struct kvm_vcpu *vcpu), 20 TP_ARGS(vcpu), 21 TP_STRUCT__entry( 22 __field(unsigned long, pc) 23 ), 24 25 TP_fast_assign( 26 __entry->pc = vcpu->arch.pc; 27 ), 28 29 TP_printk("PC: 0x%08lx", __entry->pc) 30 ); 31 32 DEFINE_EVENT(kvm_transition, kvm_enter, 33 TP_PROTO(struct kvm_vcpu *vcpu), 34 TP_ARGS(vcpu)); 35 36 DEFINE_EVENT(kvm_transition, kvm_reenter, 37 TP_PROTO(struct kvm_vcpu *vcpu), 38 TP_ARGS(vcpu)); 39 40 DEFINE_EVENT(kvm_transition, kvm_out, 41 TP_PROTO(struct kvm_vcpu *vcpu), 42 TP_ARGS(vcpu)); 43 44 /* Further exit reasons */ 45 #define KVM_TRACE_EXIT_IDLE 64 46 #define KVM_TRACE_EXIT_CACHE 65 47 48 /* Tracepoints for VM exits */ 49 #define kvm_trace_symbol_exit_types \ 50 { KVM_TRACE_EXIT_IDLE, "IDLE" }, \ 51 { KVM_TRACE_EXIT_CACHE, "CACHE" } 52 53 DECLARE_EVENT_CLASS(kvm_exit, 54 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 55 TP_ARGS(vcpu, reason), 56 TP_STRUCT__entry( 57 __field(unsigned long, pc) 58 __field(unsigned int, reason) 59 ), 60 61 TP_fast_assign( 62 __entry->pc = vcpu->arch.pc; 63 __entry->reason = reason; 64 ), 65 66 TP_printk("[%s]PC: 0x%08lx", 67 __print_symbolic(__entry->reason, 68 kvm_trace_symbol_exit_types), 69 __entry->pc) 70 ); 71 72 DEFINE_EVENT(kvm_exit, kvm_exit_idle, 73 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 74 TP_ARGS(vcpu, reason)); 75 76 DEFINE_EVENT(kvm_exit, kvm_exit_cache, 77 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 78 TP_ARGS(vcpu, reason)); 79 80 DEFINE_EVENT(kvm_exit, kvm_exit, 81 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 82 TP_ARGS(vcpu, reason)); 83 84 TRACE_EVENT(kvm_exit_gspr, 85 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int inst_word), 86 TP_ARGS(vcpu, inst_word), 87 TP_STRUCT__entry( 88 __field(unsigned int, inst_word) 89 ), 90 91 TP_fast_assign( 92 __entry->inst_word = inst_word; 93 ), 94 95 TP_printk("Inst word: 0x%08x", __entry->inst_word) 96 ); 97 98 #define KVM_TRACE_AUX_SAVE 0 99 #define KVM_TRACE_AUX_RESTORE 1 100 #define KVM_TRACE_AUX_ENABLE 2 101 #define KVM_TRACE_AUX_DISABLE 3 102 #define KVM_TRACE_AUX_DISCARD 4 103 104 #define KVM_TRACE_AUX_FPU 1 105 #define KVM_TRACE_AUX_LSX 2 106 #define KVM_TRACE_AUX_LASX 3 107 108 #define kvm_trace_symbol_aux_op \ 109 { KVM_TRACE_AUX_SAVE, "save" }, \ 110 { KVM_TRACE_AUX_RESTORE, "restore" }, \ 111 { KVM_TRACE_AUX_ENABLE, "enable" }, \ 112 { KVM_TRACE_AUX_DISABLE, "disable" }, \ 113 { KVM_TRACE_AUX_DISCARD, "discard" } 114 115 #define kvm_trace_symbol_aux_state \ 116 { KVM_TRACE_AUX_FPU, "FPU" }, \ 117 { KVM_TRACE_AUX_LSX, "LSX" }, \ 118 { KVM_TRACE_AUX_LASX, "LASX" } 119 120 TRACE_EVENT(kvm_aux, 121 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op, 122 unsigned int state), 123 TP_ARGS(vcpu, op, state), 124 TP_STRUCT__entry( 125 __field(unsigned long, pc) 126 __field(u8, op) 127 __field(u8, state) 128 ), 129 130 TP_fast_assign( 131 __entry->pc = vcpu->arch.pc; 132 __entry->op = op; 133 __entry->state = state; 134 ), 135 136 TP_printk("%s %s PC: 0x%08lx", 137 __print_symbolic(__entry->op, 138 kvm_trace_symbol_aux_op), 139 __print_symbolic(__entry->state, 140 kvm_trace_symbol_aux_state), 141 __entry->pc) 142 ); 143 144 TRACE_EVENT(kvm_vpid_change, 145 TP_PROTO(struct kvm_vcpu *vcpu, unsigned long vpid), 146 TP_ARGS(vcpu, vpid), 147 TP_STRUCT__entry( 148 __field(unsigned long, vpid) 149 ), 150 151 TP_fast_assign( 152 __entry->vpid = vpid; 153 ), 154 155 TP_printk("VPID: 0x%08lx", __entry->vpid) 156 ); 157 158 #endif /* _TRACE_KVM_H */ 159 160 #undef TRACE_INCLUDE_PATH 161 #define TRACE_INCLUDE_PATH ../../arch/loongarch/kvm 162 #undef TRACE_INCLUDE_FILE 163 #define TRACE_INCLUDE_FILE trace 164 165 /* This part must be outside protection */ 166 #include <trace/define_trace.h> 167