1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) 3 #define _TRACE_KVM_H 4 5 #include <linux/tracepoint.h> 6 7 #undef TRACE_SYSTEM 8 #define TRACE_SYSTEM kvm 9 10 /* 11 * Tracepoints for entry/exit to guest 12 */ 13 TRACE_EVENT(kvm_entry, 14 TP_PROTO(unsigned long vcpu_pc), 15 TP_ARGS(vcpu_pc), 16 17 TP_STRUCT__entry( 18 __field( unsigned long, vcpu_pc ) 19 ), 20 21 TP_fast_assign( 22 __entry->vcpu_pc = vcpu_pc; 23 ), 24 25 TP_printk("PC: 0x%08lx", __entry->vcpu_pc) 26 ); 27 28 TRACE_EVENT(kvm_exit, 29 TP_PROTO(int idx, unsigned int exit_reason, unsigned long vcpu_pc), 30 TP_ARGS(idx, exit_reason, vcpu_pc), 31 32 TP_STRUCT__entry( 33 __field( int, idx ) 34 __field( unsigned int, exit_reason ) 35 __field( unsigned long, vcpu_pc ) 36 ), 37 38 TP_fast_assign( 39 __entry->idx = idx; 40 __entry->exit_reason = exit_reason; 41 __entry->vcpu_pc = vcpu_pc; 42 ), 43 44 TP_printk("%s: HSR_EC: 0x%04x (%s), PC: 0x%08lx", 45 __print_symbolic(__entry->idx, kvm_arm_exception_type), 46 __entry->exit_reason, 47 __print_symbolic(__entry->exit_reason, kvm_arm_exception_class), 48 __entry->vcpu_pc) 49 ); 50 51 TRACE_EVENT(kvm_guest_fault, 52 TP_PROTO(unsigned long vcpu_pc, unsigned long hsr, 53 unsigned long hxfar, 54 unsigned long long ipa), 55 TP_ARGS(vcpu_pc, hsr, hxfar, ipa), 56 57 TP_STRUCT__entry( 58 __field( unsigned long, vcpu_pc ) 59 __field( unsigned long, hsr ) 60 __field( unsigned long, hxfar ) 61 __field( unsigned long long, ipa ) 62 ), 63 64 TP_fast_assign( 65 __entry->vcpu_pc = vcpu_pc; 66 __entry->hsr = hsr; 67 __entry->hxfar = hxfar; 68 __entry->ipa = ipa; 69 ), 70 71 TP_printk("ipa %#llx, hsr %#08lx, hxfar %#08lx, pc %#08lx", 72 __entry->ipa, __entry->hsr, 73 __entry->hxfar, __entry->vcpu_pc) 74 ); 75 76 TRACE_EVENT(kvm_access_fault, 77 TP_PROTO(unsigned long ipa), 78 TP_ARGS(ipa), 79 80 TP_STRUCT__entry( 81 __field( unsigned long, ipa ) 82 ), 83 84 TP_fast_assign( 85 __entry->ipa = ipa; 86 ), 87 88 TP_printk("IPA: %lx", __entry->ipa) 89 ); 90 91 TRACE_EVENT(kvm_irq_line, 92 TP_PROTO(unsigned int type, int vcpu_idx, int irq_num, int level), 93 TP_ARGS(type, vcpu_idx, irq_num, level), 94 95 TP_STRUCT__entry( 96 __field( unsigned int, type ) 97 __field( int, vcpu_idx ) 98 __field( int, irq_num ) 99 __field( int, level ) 100 ), 101 102 TP_fast_assign( 103 __entry->type = type; 104 __entry->vcpu_idx = vcpu_idx; 105 __entry->irq_num = irq_num; 106 __entry->level = level; 107 ), 108 109 TP_printk("Inject %s interrupt (%d), vcpu->idx: %d, num: %d, level: %d", 110 (__entry->type == KVM_ARM_IRQ_TYPE_CPU) ? "CPU" : 111 (__entry->type == KVM_ARM_IRQ_TYPE_PPI) ? "VGIC PPI" : 112 (__entry->type == KVM_ARM_IRQ_TYPE_SPI) ? "VGIC SPI" : "UNKNOWN", 113 __entry->type, __entry->vcpu_idx, __entry->irq_num, __entry->level) 114 ); 115 116 TRACE_EVENT(kvm_mmio_emulate, 117 TP_PROTO(unsigned long vcpu_pc, unsigned long instr, 118 unsigned long cpsr), 119 TP_ARGS(vcpu_pc, instr, cpsr), 120 121 TP_STRUCT__entry( 122 __field( unsigned long, vcpu_pc ) 123 __field( unsigned long, instr ) 124 __field( unsigned long, cpsr ) 125 ), 126 127 TP_fast_assign( 128 __entry->vcpu_pc = vcpu_pc; 129 __entry->instr = instr; 130 __entry->cpsr = cpsr; 131 ), 132 133 TP_printk("Emulate MMIO at: 0x%08lx (instr: %08lx, cpsr: %08lx)", 134 __entry->vcpu_pc, __entry->instr, __entry->cpsr) 135 ); 136 137 TRACE_EVENT(kvm_unmap_hva_range, 138 TP_PROTO(unsigned long start, unsigned long end), 139 TP_ARGS(start, end), 140 141 TP_STRUCT__entry( 142 __field( unsigned long, start ) 143 __field( unsigned long, end ) 144 ), 145 146 TP_fast_assign( 147 __entry->start = start; 148 __entry->end = end; 149 ), 150 151 TP_printk("mmu notifier unmap range: %#08lx -- %#08lx", 152 __entry->start, __entry->end) 153 ); 154 155 TRACE_EVENT(kvm_set_spte_hva, 156 TP_PROTO(unsigned long hva), 157 TP_ARGS(hva), 158 159 TP_STRUCT__entry( 160 __field( unsigned long, hva ) 161 ), 162 163 TP_fast_assign( 164 __entry->hva = hva; 165 ), 166 167 TP_printk("mmu notifier set pte hva: %#08lx", __entry->hva) 168 ); 169 170 TRACE_EVENT(kvm_age_hva, 171 TP_PROTO(unsigned long start, unsigned long end), 172 TP_ARGS(start, end), 173 174 TP_STRUCT__entry( 175 __field( unsigned long, start ) 176 __field( unsigned long, end ) 177 ), 178 179 TP_fast_assign( 180 __entry->start = start; 181 __entry->end = end; 182 ), 183 184 TP_printk("mmu notifier age hva: %#08lx -- %#08lx", 185 __entry->start, __entry->end) 186 ); 187 188 TRACE_EVENT(kvm_test_age_hva, 189 TP_PROTO(unsigned long hva), 190 TP_ARGS(hva), 191 192 TP_STRUCT__entry( 193 __field( unsigned long, hva ) 194 ), 195 196 TP_fast_assign( 197 __entry->hva = hva; 198 ), 199 200 TP_printk("mmu notifier test age hva: %#08lx", __entry->hva) 201 ); 202 203 TRACE_EVENT(kvm_set_way_flush, 204 TP_PROTO(unsigned long vcpu_pc, bool cache), 205 TP_ARGS(vcpu_pc, cache), 206 207 TP_STRUCT__entry( 208 __field( unsigned long, vcpu_pc ) 209 __field( bool, cache ) 210 ), 211 212 TP_fast_assign( 213 __entry->vcpu_pc = vcpu_pc; 214 __entry->cache = cache; 215 ), 216 217 TP_printk("S/W flush at 0x%016lx (cache %s)", 218 __entry->vcpu_pc, __entry->cache ? "on" : "off") 219 ); 220 221 TRACE_EVENT(kvm_toggle_cache, 222 TP_PROTO(unsigned long vcpu_pc, bool was, bool now), 223 TP_ARGS(vcpu_pc, was, now), 224 225 TP_STRUCT__entry( 226 __field( unsigned long, vcpu_pc ) 227 __field( bool, was ) 228 __field( bool, now ) 229 ), 230 231 TP_fast_assign( 232 __entry->vcpu_pc = vcpu_pc; 233 __entry->was = was; 234 __entry->now = now; 235 ), 236 237 TP_printk("VM op at 0x%016lx (cache was %s, now %s)", 238 __entry->vcpu_pc, __entry->was ? "on" : "off", 239 __entry->now ? "on" : "off") 240 ); 241 242 /* 243 * Tracepoints for arch_timer 244 */ 245 TRACE_EVENT(kvm_timer_update_irq, 246 TP_PROTO(unsigned long vcpu_id, __u32 irq, int level), 247 TP_ARGS(vcpu_id, irq, level), 248 249 TP_STRUCT__entry( 250 __field( unsigned long, vcpu_id ) 251 __field( __u32, irq ) 252 __field( int, level ) 253 ), 254 255 TP_fast_assign( 256 __entry->vcpu_id = vcpu_id; 257 __entry->irq = irq; 258 __entry->level = level; 259 ), 260 261 TP_printk("VCPU: %ld, IRQ %d, level %d", 262 __entry->vcpu_id, __entry->irq, __entry->level) 263 ); 264 265 #endif /* _TRACE_KVM_H */ 266 267 #undef TRACE_INCLUDE_PATH 268 #define TRACE_INCLUDE_PATH ../../../virt/kvm/arm 269 #undef TRACE_INCLUDE_FILE 270 #define TRACE_INCLUDE_FILE trace 271 272 /* This part must be outside protection */ 273 #include <trace/define_trace.h> 274