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 int, vcpu_id) 23 __field(unsigned long, pc) 24 ), 25 26 TP_fast_assign( 27 __entry->vcpu_id = vcpu->vcpu_id; 28 __entry->pc = vcpu->arch.pc; 29 ), 30 31 TP_printk("vcpu %u PC: 0x%08lx", __entry->vcpu_id, __entry->pc) 32 ); 33 34 DEFINE_EVENT(kvm_transition, kvm_enter, 35 TP_PROTO(struct kvm_vcpu *vcpu), 36 TP_ARGS(vcpu)); 37 38 DEFINE_EVENT(kvm_transition, kvm_reenter, 39 TP_PROTO(struct kvm_vcpu *vcpu), 40 TP_ARGS(vcpu)); 41 42 DEFINE_EVENT(kvm_transition, kvm_out, 43 TP_PROTO(struct kvm_vcpu *vcpu), 44 TP_ARGS(vcpu)); 45 46 /* Further exit reasons */ 47 #define KVM_TRACE_EXIT_IDLE 64 48 #define KVM_TRACE_EXIT_CACHE 65 49 #define KVM_TRACE_EXIT_CPUCFG 66 50 #define KVM_TRACE_EXIT_CSR 67 51 52 /* Tracepoints for VM exits */ 53 #define kvm_trace_symbol_exit_types \ 54 { KVM_TRACE_EXIT_IDLE, "IDLE" }, \ 55 { KVM_TRACE_EXIT_CACHE, "CACHE" }, \ 56 { KVM_TRACE_EXIT_CPUCFG, "CPUCFG" }, \ 57 { KVM_TRACE_EXIT_CSR, "CSR" } 58 59 DECLARE_EVENT_CLASS(kvm_exit, 60 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 61 TP_ARGS(vcpu, reason), 62 TP_STRUCT__entry( 63 __field(unsigned int, vcpu_id) 64 __field(unsigned long, pc) 65 __field(unsigned int, reason) 66 ), 67 68 TP_fast_assign( 69 __entry->vcpu_id = vcpu->vcpu_id; 70 __entry->pc = vcpu->arch.pc; 71 __entry->reason = reason; 72 ), 73 74 TP_printk("vcpu %u [%s] PC: 0x%08lx", 75 __entry->vcpu_id, 76 __print_symbolic(__entry->reason, 77 kvm_trace_symbol_exit_types), 78 __entry->pc) 79 ); 80 81 DEFINE_EVENT(kvm_exit, kvm_exit_idle, 82 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 83 TP_ARGS(vcpu, reason)); 84 85 DEFINE_EVENT(kvm_exit, kvm_exit_cache, 86 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 87 TP_ARGS(vcpu, reason)); 88 89 DEFINE_EVENT(kvm_exit, kvm_exit_cpucfg, 90 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 91 TP_ARGS(vcpu, reason)); 92 93 DEFINE_EVENT(kvm_exit, kvm_exit_csr, 94 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 95 TP_ARGS(vcpu, reason)); 96 97 DEFINE_EVENT(kvm_exit, kvm_exit, 98 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), 99 TP_ARGS(vcpu, reason)); 100 101 TRACE_EVENT(kvm_exit_gspr, 102 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int inst_word), 103 TP_ARGS(vcpu, inst_word), 104 TP_STRUCT__entry( 105 __field(unsigned int, vcpu_id) 106 __field(unsigned int, inst_word) 107 ), 108 109 TP_fast_assign( 110 __entry->vcpu_id = vcpu->vcpu_id; 111 __entry->inst_word = inst_word; 112 ), 113 114 TP_printk("vcpu %u Inst word: 0x%08x", __entry->vcpu_id, 115 __entry->inst_word) 116 ); 117 118 #define KVM_TRACE_AUX_SAVE 0 119 #define KVM_TRACE_AUX_RESTORE 1 120 #define KVM_TRACE_AUX_ENABLE 2 121 #define KVM_TRACE_AUX_DISABLE 3 122 #define KVM_TRACE_AUX_DISCARD 4 123 124 #define KVM_TRACE_AUX_FPU 1 125 #define KVM_TRACE_AUX_LSX 2 126 #define KVM_TRACE_AUX_LASX 3 127 128 #define kvm_trace_symbol_aux_op \ 129 { KVM_TRACE_AUX_SAVE, "save" }, \ 130 { KVM_TRACE_AUX_RESTORE, "restore" }, \ 131 { KVM_TRACE_AUX_ENABLE, "enable" }, \ 132 { KVM_TRACE_AUX_DISABLE, "disable" }, \ 133 { KVM_TRACE_AUX_DISCARD, "discard" } 134 135 #define kvm_trace_symbol_aux_state \ 136 { KVM_TRACE_AUX_FPU, "FPU" }, \ 137 { KVM_TRACE_AUX_LSX, "LSX" }, \ 138 { KVM_TRACE_AUX_LASX, "LASX" } 139 140 TRACE_EVENT(kvm_aux, 141 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op, 142 unsigned int state), 143 TP_ARGS(vcpu, op, state), 144 TP_STRUCT__entry( 145 __field(unsigned long, pc) 146 __field(u8, op) 147 __field(u8, state) 148 ), 149 150 TP_fast_assign( 151 __entry->pc = vcpu->arch.pc; 152 __entry->op = op; 153 __entry->state = state; 154 ), 155 156 TP_printk("%s %s PC: 0x%08lx", 157 __print_symbolic(__entry->op, 158 kvm_trace_symbol_aux_op), 159 __print_symbolic(__entry->state, 160 kvm_trace_symbol_aux_state), 161 __entry->pc) 162 ); 163 164 TRACE_EVENT(kvm_vpid_change, 165 TP_PROTO(struct kvm_vcpu *vcpu, unsigned long vpid), 166 TP_ARGS(vcpu, vpid), 167 TP_STRUCT__entry( 168 __field(unsigned long, vpid) 169 ), 170 171 TP_fast_assign( 172 __entry->vpid = vpid; 173 ), 174 175 TP_printk("VPID: 0x%08lx", __entry->vpid) 176 ); 177 178 #endif /* _TRACE_KVM_H */ 179 180 #undef TRACE_INCLUDE_PATH 181 #define TRACE_INCLUDE_PATH ../../arch/loongarch/kvm 182 #undef TRACE_INCLUDE_FILE 183 #define TRACE_INCLUDE_FILE trace 184 185 /* This part must be outside protection */ 186 #include <trace/define_trace.h> 187