0001
0002
0003 #if !defined(_TRACE_KVM_PR_H) || defined(TRACE_HEADER_MULTI_READ)
0004 #define _TRACE_KVM_PR_H
0005
0006 #include <linux/tracepoint.h>
0007 #include "trace_book3s.h"
0008
0009 #undef TRACE_SYSTEM
0010 #define TRACE_SYSTEM kvm_pr
0011
0012 TRACE_EVENT(kvm_book3s_reenter,
0013 TP_PROTO(int r, struct kvm_vcpu *vcpu),
0014 TP_ARGS(r, vcpu),
0015
0016 TP_STRUCT__entry(
0017 __field( unsigned int, r )
0018 __field( unsigned long, pc )
0019 ),
0020
0021 TP_fast_assign(
0022 __entry->r = r;
0023 __entry->pc = kvmppc_get_pc(vcpu);
0024 ),
0025
0026 TP_printk("reentry r=%d | pc=0x%lx", __entry->r, __entry->pc)
0027 );
0028
0029 #ifdef CONFIG_PPC_BOOK3S_64
0030
0031 TRACE_EVENT(kvm_book3s_64_mmu_map,
0032 TP_PROTO(int rflags, ulong hpteg, ulong va, kvm_pfn_t hpaddr,
0033 struct kvmppc_pte *orig_pte),
0034 TP_ARGS(rflags, hpteg, va, hpaddr, orig_pte),
0035
0036 TP_STRUCT__entry(
0037 __field( unsigned char, flag_w )
0038 __field( unsigned char, flag_x )
0039 __field( unsigned long, eaddr )
0040 __field( unsigned long, hpteg )
0041 __field( unsigned long, va )
0042 __field( unsigned long long, vpage )
0043 __field( unsigned long, hpaddr )
0044 ),
0045
0046 TP_fast_assign(
0047 __entry->flag_w = ((rflags & HPTE_R_PP) == 3) ? '-' : 'w';
0048 __entry->flag_x = (rflags & HPTE_R_N) ? '-' : 'x';
0049 __entry->eaddr = orig_pte->eaddr;
0050 __entry->hpteg = hpteg;
0051 __entry->va = va;
0052 __entry->vpage = orig_pte->vpage;
0053 __entry->hpaddr = hpaddr;
0054 ),
0055
0056 TP_printk("KVM: %c%c Map 0x%lx: [%lx] 0x%lx (0x%llx) -> %lx",
0057 __entry->flag_w, __entry->flag_x, __entry->eaddr,
0058 __entry->hpteg, __entry->va, __entry->vpage, __entry->hpaddr)
0059 );
0060
0061 #endif
0062
0063 TRACE_EVENT(kvm_book3s_mmu_map,
0064 TP_PROTO(struct hpte_cache *pte),
0065 TP_ARGS(pte),
0066
0067 TP_STRUCT__entry(
0068 __field( u64, host_vpn )
0069 __field( u64, pfn )
0070 __field( ulong, eaddr )
0071 __field( u64, vpage )
0072 __field( ulong, raddr )
0073 __field( int, flags )
0074 ),
0075
0076 TP_fast_assign(
0077 __entry->host_vpn = pte->host_vpn;
0078 __entry->pfn = pte->pfn;
0079 __entry->eaddr = pte->pte.eaddr;
0080 __entry->vpage = pte->pte.vpage;
0081 __entry->raddr = pte->pte.raddr;
0082 __entry->flags = (pte->pte.may_read ? 0x4 : 0) |
0083 (pte->pte.may_write ? 0x2 : 0) |
0084 (pte->pte.may_execute ? 0x1 : 0);
0085 ),
0086
0087 TP_printk("Map: hvpn=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
0088 __entry->host_vpn, __entry->pfn, __entry->eaddr,
0089 __entry->vpage, __entry->raddr, __entry->flags)
0090 );
0091
0092 TRACE_EVENT(kvm_book3s_mmu_invalidate,
0093 TP_PROTO(struct hpte_cache *pte),
0094 TP_ARGS(pte),
0095
0096 TP_STRUCT__entry(
0097 __field( u64, host_vpn )
0098 __field( u64, pfn )
0099 __field( ulong, eaddr )
0100 __field( u64, vpage )
0101 __field( ulong, raddr )
0102 __field( int, flags )
0103 ),
0104
0105 TP_fast_assign(
0106 __entry->host_vpn = pte->host_vpn;
0107 __entry->pfn = pte->pfn;
0108 __entry->eaddr = pte->pte.eaddr;
0109 __entry->vpage = pte->pte.vpage;
0110 __entry->raddr = pte->pte.raddr;
0111 __entry->flags = (pte->pte.may_read ? 0x4 : 0) |
0112 (pte->pte.may_write ? 0x2 : 0) |
0113 (pte->pte.may_execute ? 0x1 : 0);
0114 ),
0115
0116 TP_printk("Flush: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
0117 __entry->host_vpn, __entry->pfn, __entry->eaddr,
0118 __entry->vpage, __entry->raddr, __entry->flags)
0119 );
0120
0121 TRACE_EVENT(kvm_book3s_mmu_flush,
0122 TP_PROTO(const char *type, struct kvm_vcpu *vcpu, unsigned long long p1,
0123 unsigned long long p2),
0124 TP_ARGS(type, vcpu, p1, p2),
0125
0126 TP_STRUCT__entry(
0127 __field( int, count )
0128 __field( unsigned long long, p1 )
0129 __field( unsigned long long, p2 )
0130 __field( const char *, type )
0131 ),
0132
0133 TP_fast_assign(
0134 __entry->count = to_book3s(vcpu)->hpte_cache_count;
0135 __entry->p1 = p1;
0136 __entry->p2 = p2;
0137 __entry->type = type;
0138 ),
0139
0140 TP_printk("Flush %d %sPTEs: %llx - %llx",
0141 __entry->count, __entry->type, __entry->p1, __entry->p2)
0142 );
0143
0144 TRACE_EVENT(kvm_book3s_slb_found,
0145 TP_PROTO(unsigned long long gvsid, unsigned long long hvsid),
0146 TP_ARGS(gvsid, hvsid),
0147
0148 TP_STRUCT__entry(
0149 __field( unsigned long long, gvsid )
0150 __field( unsigned long long, hvsid )
0151 ),
0152
0153 TP_fast_assign(
0154 __entry->gvsid = gvsid;
0155 __entry->hvsid = hvsid;
0156 ),
0157
0158 TP_printk("%llx -> %llx", __entry->gvsid, __entry->hvsid)
0159 );
0160
0161 TRACE_EVENT(kvm_book3s_slb_fail,
0162 TP_PROTO(u16 sid_map_mask, unsigned long long gvsid),
0163 TP_ARGS(sid_map_mask, gvsid),
0164
0165 TP_STRUCT__entry(
0166 __field( unsigned short, sid_map_mask )
0167 __field( unsigned long long, gvsid )
0168 ),
0169
0170 TP_fast_assign(
0171 __entry->sid_map_mask = sid_map_mask;
0172 __entry->gvsid = gvsid;
0173 ),
0174
0175 TP_printk("%x/%x: %llx", __entry->sid_map_mask,
0176 SID_MAP_MASK - __entry->sid_map_mask, __entry->gvsid)
0177 );
0178
0179 TRACE_EVENT(kvm_book3s_slb_map,
0180 TP_PROTO(u16 sid_map_mask, unsigned long long gvsid,
0181 unsigned long long hvsid),
0182 TP_ARGS(sid_map_mask, gvsid, hvsid),
0183
0184 TP_STRUCT__entry(
0185 __field( unsigned short, sid_map_mask )
0186 __field( unsigned long long, guest_vsid )
0187 __field( unsigned long long, host_vsid )
0188 ),
0189
0190 TP_fast_assign(
0191 __entry->sid_map_mask = sid_map_mask;
0192 __entry->guest_vsid = gvsid;
0193 __entry->host_vsid = hvsid;
0194 ),
0195
0196 TP_printk("%x: %llx -> %llx", __entry->sid_map_mask,
0197 __entry->guest_vsid, __entry->host_vsid)
0198 );
0199
0200 TRACE_EVENT(kvm_book3s_slbmte,
0201 TP_PROTO(u64 slb_vsid, u64 slb_esid),
0202 TP_ARGS(slb_vsid, slb_esid),
0203
0204 TP_STRUCT__entry(
0205 __field( u64, slb_vsid )
0206 __field( u64, slb_esid )
0207 ),
0208
0209 TP_fast_assign(
0210 __entry->slb_vsid = slb_vsid;
0211 __entry->slb_esid = slb_esid;
0212 ),
0213
0214 TP_printk("%llx, %llx", __entry->slb_vsid, __entry->slb_esid)
0215 );
0216
0217 TRACE_EVENT(kvm_exit,
0218 TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu),
0219 TP_ARGS(exit_nr, vcpu),
0220
0221 TP_STRUCT__entry(
0222 __field( unsigned int, exit_nr )
0223 __field( unsigned long, pc )
0224 __field( unsigned long, msr )
0225 __field( unsigned long, dar )
0226 __field( unsigned long, srr1 )
0227 __field( unsigned long, last_inst )
0228 ),
0229
0230 TP_fast_assign(
0231 __entry->exit_nr = exit_nr;
0232 __entry->pc = kvmppc_get_pc(vcpu);
0233 __entry->dar = kvmppc_get_fault_dar(vcpu);
0234 __entry->msr = kvmppc_get_msr(vcpu);
0235 __entry->srr1 = vcpu->arch.shadow_srr1;
0236 __entry->last_inst = vcpu->arch.last_inst;
0237 ),
0238
0239 TP_printk("exit=%s"
0240 " | pc=0x%lx"
0241 " | msr=0x%lx"
0242 " | dar=0x%lx"
0243 " | srr1=0x%lx"
0244 " | last_inst=0x%lx"
0245 ,
0246 __print_symbolic(__entry->exit_nr, kvm_trace_symbol_exit),
0247 __entry->pc,
0248 __entry->msr,
0249 __entry->dar,
0250 __entry->srr1,
0251 __entry->last_inst
0252 )
0253 );
0254
0255 #endif
0256
0257
0258
0259 #undef TRACE_INCLUDE_PATH
0260 #undef TRACE_INCLUDE_FILE
0261
0262 #define TRACE_INCLUDE_PATH .
0263 #define TRACE_INCLUDE_FILE trace_pr
0264
0265 #include <trace/define_trace.h>