1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #if !defined(_TRACE_KVM_PR_H) || defined(TRACE_HEADER_MULTI_READ) 4 #define _TRACE_KVM_PR_H 5 6 #include <linux/tracepoint.h> 7 #include "trace_book3s.h" 8 9 #undef TRACE_SYSTEM 10 #define TRACE_SYSTEM kvm_pr 11 12 TRACE_EVENT(kvm_book3s_reenter, 13 TP_PROTO(int r, struct kvm_vcpu *vcpu), 14 TP_ARGS(r, vcpu), 15 16 TP_STRUCT__entry( 17 __field( unsigned int, r ) 18 __field( unsigned long, pc ) 19 ), 20 21 TP_fast_assign( 22 __entry->r = r; 23 __entry->pc = kvmppc_get_pc(vcpu); 24 ), 25 26 TP_printk("reentry r=%d | pc=0x%lx", __entry->r, __entry->pc) 27 ); 28 29 #ifdef CONFIG_PPC_BOOK3S_64 30 31 TRACE_EVENT(kvm_book3s_64_mmu_map, 32 TP_PROTO(int rflags, ulong hpteg, ulong va, kvm_pfn_t hpaddr, 33 struct kvmppc_pte *orig_pte), 34 TP_ARGS(rflags, hpteg, va, hpaddr, orig_pte), 35 36 TP_STRUCT__entry( 37 __field( unsigned char, flag_w ) 38 __field( unsigned char, flag_x ) 39 __field( unsigned long, eaddr ) 40 __field( unsigned long, hpteg ) 41 __field( unsigned long, va ) 42 __field( unsigned long long, vpage ) 43 __field( unsigned long, hpaddr ) 44 ), 45 46 TP_fast_assign( 47 __entry->flag_w = ((rflags & HPTE_R_PP) == 3) ? '-' : 'w'; 48 __entry->flag_x = (rflags & HPTE_R_N) ? '-' : 'x'; 49 __entry->eaddr = orig_pte->eaddr; 50 __entry->hpteg = hpteg; 51 __entry->va = va; 52 __entry->vpage = orig_pte->vpage; 53 __entry->hpaddr = hpaddr; 54 ), 55 56 TP_printk("KVM: %c%c Map 0x%lx: [%lx] 0x%lx (0x%llx) -> %lx", 57 __entry->flag_w, __entry->flag_x, __entry->eaddr, 58 __entry->hpteg, __entry->va, __entry->vpage, __entry->hpaddr) 59 ); 60 61 #endif /* CONFIG_PPC_BOOK3S_64 */ 62 63 TRACE_EVENT(kvm_book3s_mmu_map, 64 TP_PROTO(struct hpte_cache *pte), 65 TP_ARGS(pte), 66 67 TP_STRUCT__entry( 68 __field( u64, host_vpn ) 69 __field( u64, pfn ) 70 __field( ulong, eaddr ) 71 __field( u64, vpage ) 72 __field( ulong, raddr ) 73 __field( int, flags ) 74 ), 75 76 TP_fast_assign( 77 __entry->host_vpn = pte->host_vpn; 78 __entry->pfn = pte->pfn; 79 __entry->eaddr = pte->pte.eaddr; 80 __entry->vpage = pte->pte.vpage; 81 __entry->raddr = pte->pte.raddr; 82 __entry->flags = (pte->pte.may_read ? 0x4 : 0) | 83 (pte->pte.may_write ? 0x2 : 0) | 84 (pte->pte.may_execute ? 0x1 : 0); 85 ), 86 87 TP_printk("Map: hvpn=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]", 88 __entry->host_vpn, __entry->pfn, __entry->eaddr, 89 __entry->vpage, __entry->raddr, __entry->flags) 90 ); 91 92 TRACE_EVENT(kvm_book3s_mmu_invalidate, 93 TP_PROTO(struct hpte_cache *pte), 94 TP_ARGS(pte), 95 96 TP_STRUCT__entry( 97 __field( u64, host_vpn ) 98 __field( u64, pfn ) 99 __field( ulong, eaddr ) 100 __field( u64, vpage ) 101 __field( ulong, raddr ) 102 __field( int, flags ) 103 ), 104 105 TP_fast_assign( 106 __entry->host_vpn = pte->host_vpn; 107 __entry->pfn = pte->pfn; 108 __entry->eaddr = pte->pte.eaddr; 109 __entry->vpage = pte->pte.vpage; 110 __entry->raddr = pte->pte.raddr; 111 __entry->flags = (pte->pte.may_read ? 0x4 : 0) | 112 (pte->pte.may_write ? 0x2 : 0) | 113 (pte->pte.may_execute ? 0x1 : 0); 114 ), 115 116 TP_printk("Flush: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]", 117 __entry->host_vpn, __entry->pfn, __entry->eaddr, 118 __entry->vpage, __entry->raddr, __entry->flags) 119 ); 120 121 TRACE_EVENT(kvm_book3s_mmu_flush, 122 TP_PROTO(const char *type, struct kvm_vcpu *vcpu, unsigned long long p1, 123 unsigned long long p2), 124 TP_ARGS(type, vcpu, p1, p2), 125 126 TP_STRUCT__entry( 127 __field( int, count ) 128 __field( unsigned long long, p1 ) 129 __field( unsigned long long, p2 ) 130 __field( const char *, type ) 131 ), 132 133 TP_fast_assign( 134 __entry->count = to_book3s(vcpu)->hpte_cache_count; 135 __entry->p1 = p1; 136 __entry->p2 = p2; 137 __entry->type = type; 138 ), 139 140 TP_printk("Flush %d %sPTEs: %llx - %llx", 141 __entry->count, __entry->type, __entry->p1, __entry->p2) 142 ); 143 144 TRACE_EVENT(kvm_book3s_slb_found, 145 TP_PROTO(unsigned long long gvsid, unsigned long long hvsid), 146 TP_ARGS(gvsid, hvsid), 147 148 TP_STRUCT__entry( 149 __field( unsigned long long, gvsid ) 150 __field( unsigned long long, hvsid ) 151 ), 152 153 TP_fast_assign( 154 __entry->gvsid = gvsid; 155 __entry->hvsid = hvsid; 156 ), 157 158 TP_printk("%llx -> %llx", __entry->gvsid, __entry->hvsid) 159 ); 160 161 TRACE_EVENT(kvm_book3s_slb_fail, 162 TP_PROTO(u16 sid_map_mask, unsigned long long gvsid), 163 TP_ARGS(sid_map_mask, gvsid), 164 165 TP_STRUCT__entry( 166 __field( unsigned short, sid_map_mask ) 167 __field( unsigned long long, gvsid ) 168 ), 169 170 TP_fast_assign( 171 __entry->sid_map_mask = sid_map_mask; 172 __entry->gvsid = gvsid; 173 ), 174 175 TP_printk("%x/%x: %llx", __entry->sid_map_mask, 176 SID_MAP_MASK - __entry->sid_map_mask, __entry->gvsid) 177 ); 178 179 TRACE_EVENT(kvm_book3s_slb_map, 180 TP_PROTO(u16 sid_map_mask, unsigned long long gvsid, 181 unsigned long long hvsid), 182 TP_ARGS(sid_map_mask, gvsid, hvsid), 183 184 TP_STRUCT__entry( 185 __field( unsigned short, sid_map_mask ) 186 __field( unsigned long long, guest_vsid ) 187 __field( unsigned long long, host_vsid ) 188 ), 189 190 TP_fast_assign( 191 __entry->sid_map_mask = sid_map_mask; 192 __entry->guest_vsid = gvsid; 193 __entry->host_vsid = hvsid; 194 ), 195 196 TP_printk("%x: %llx -> %llx", __entry->sid_map_mask, 197 __entry->guest_vsid, __entry->host_vsid) 198 ); 199 200 TRACE_EVENT(kvm_book3s_slbmte, 201 TP_PROTO(u64 slb_vsid, u64 slb_esid), 202 TP_ARGS(slb_vsid, slb_esid), 203 204 TP_STRUCT__entry( 205 __field( u64, slb_vsid ) 206 __field( u64, slb_esid ) 207 ), 208 209 TP_fast_assign( 210 __entry->slb_vsid = slb_vsid; 211 __entry->slb_esid = slb_esid; 212 ), 213 214 TP_printk("%llx, %llx", __entry->slb_vsid, __entry->slb_esid) 215 ); 216 217 TRACE_EVENT(kvm_exit, 218 TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu), 219 TP_ARGS(exit_nr, vcpu), 220 221 TP_STRUCT__entry( 222 __field( unsigned int, exit_nr ) 223 __field( unsigned long, pc ) 224 __field( unsigned long, msr ) 225 __field( unsigned long, dar ) 226 __field( unsigned long, srr1 ) 227 __field( unsigned long, last_inst ) 228 ), 229 230 TP_fast_assign( 231 __entry->exit_nr = exit_nr; 232 __entry->pc = kvmppc_get_pc(vcpu); 233 __entry->dar = kvmppc_get_fault_dar(vcpu); 234 __entry->msr = kvmppc_get_msr(vcpu); 235 __entry->srr1 = vcpu->arch.shadow_srr1; 236 __entry->last_inst = vcpu->arch.last_inst; 237 ), 238 239 TP_printk("exit=%s" 240 " | pc=0x%lx" 241 " | msr=0x%lx" 242 " | dar=0x%lx" 243 " | srr1=0x%lx" 244 " | last_inst=0x%lx" 245 , 246 __print_symbolic(__entry->exit_nr, kvm_trace_symbol_exit), 247 __entry->pc, 248 __entry->msr, 249 __entry->dar, 250 __entry->srr1, 251 __entry->last_inst 252 ) 253 ); 254 255 #endif /* _TRACE_KVM_H */ 256 257 /* This part must be outside protection */ 258 259 #undef TRACE_INCLUDE_PATH 260 #undef TRACE_INCLUDE_FILE 261 262 #define TRACE_INCLUDE_PATH . 263 #define TRACE_INCLUDE_FILE trace_pr 264 265 #include <trace/define_trace.h> 266