2 #if !defined(_TRACE_KVM_PR_H) || defined(TRACE_HEADER_MULTI_READ)
3 #define _TRACE_KVM_PR_H
5 #include <linux/tracepoint.h>
6 #include "trace_book3s.h"
9 #define TRACE_SYSTEM kvm_pr
10 #define TRACE_INCLUDE_PATH .
11 #define TRACE_INCLUDE_FILE trace_pr
13 TRACE_EVENT(kvm_book3s_reenter
,
14 TP_PROTO(int r
, struct kvm_vcpu
*vcpu
),
18 __field( unsigned int, r
)
19 __field( unsigned long, pc
)
24 __entry
->pc
= kvmppc_get_pc(vcpu
);
27 TP_printk("reentry r=%d | pc=0x%lx", __entry
->r
, __entry
->pc
)
30 #ifdef CONFIG_PPC_BOOK3S_64
32 TRACE_EVENT(kvm_book3s_64_mmu_map
,
33 TP_PROTO(int rflags
, ulong hpteg
, ulong va
, kvm_pfn_t hpaddr
,
34 struct kvmppc_pte
*orig_pte
),
35 TP_ARGS(rflags
, hpteg
, va
, hpaddr
, orig_pte
),
38 __field( unsigned char, flag_w
)
39 __field( unsigned char, flag_x
)
40 __field( unsigned long, eaddr
)
41 __field( unsigned long, hpteg
)
42 __field( unsigned long, va
)
43 __field( unsigned long long, vpage
)
44 __field( unsigned long, hpaddr
)
48 __entry
->flag_w
= ((rflags
& HPTE_R_PP
) == 3) ? '-' : 'w';
49 __entry
->flag_x
= (rflags
& HPTE_R_N
) ? '-' : 'x';
50 __entry
->eaddr
= orig_pte
->eaddr
;
51 __entry
->hpteg
= hpteg
;
53 __entry
->vpage
= orig_pte
->vpage
;
54 __entry
->hpaddr
= hpaddr
;
57 TP_printk("KVM: %c%c Map 0x%lx: [%lx] 0x%lx (0x%llx) -> %lx",
58 __entry
->flag_w
, __entry
->flag_x
, __entry
->eaddr
,
59 __entry
->hpteg
, __entry
->va
, __entry
->vpage
, __entry
->hpaddr
)
62 #endif /* CONFIG_PPC_BOOK3S_64 */
64 TRACE_EVENT(kvm_book3s_mmu_map
,
65 TP_PROTO(struct hpte_cache
*pte
),
69 __field( u64
, host_vpn
)
71 __field( ulong
, eaddr
)
73 __field( ulong
, raddr
)
78 __entry
->host_vpn
= pte
->host_vpn
;
79 __entry
->pfn
= pte
->pfn
;
80 __entry
->eaddr
= pte
->pte
.eaddr
;
81 __entry
->vpage
= pte
->pte
.vpage
;
82 __entry
->raddr
= pte
->pte
.raddr
;
83 __entry
->flags
= (pte
->pte
.may_read
? 0x4 : 0) |
84 (pte
->pte
.may_write
? 0x2 : 0) |
85 (pte
->pte
.may_execute
? 0x1 : 0);
88 TP_printk("Map: hvpn=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
89 __entry
->host_vpn
, __entry
->pfn
, __entry
->eaddr
,
90 __entry
->vpage
, __entry
->raddr
, __entry
->flags
)
93 TRACE_EVENT(kvm_book3s_mmu_invalidate
,
94 TP_PROTO(struct hpte_cache
*pte
),
98 __field( u64
, host_vpn
)
100 __field( ulong
, eaddr
)
101 __field( u64
, vpage
)
102 __field( ulong
, raddr
)
103 __field( int, flags
)
107 __entry
->host_vpn
= pte
->host_vpn
;
108 __entry
->pfn
= pte
->pfn
;
109 __entry
->eaddr
= pte
->pte
.eaddr
;
110 __entry
->vpage
= pte
->pte
.vpage
;
111 __entry
->raddr
= pte
->pte
.raddr
;
112 __entry
->flags
= (pte
->pte
.may_read
? 0x4 : 0) |
113 (pte
->pte
.may_write
? 0x2 : 0) |
114 (pte
->pte
.may_execute
? 0x1 : 0);
117 TP_printk("Flush: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
118 __entry
->host_vpn
, __entry
->pfn
, __entry
->eaddr
,
119 __entry
->vpage
, __entry
->raddr
, __entry
->flags
)
122 TRACE_EVENT(kvm_book3s_mmu_flush
,
123 TP_PROTO(const char *type
, struct kvm_vcpu
*vcpu
, unsigned long long p1
,
124 unsigned long long p2
),
125 TP_ARGS(type
, vcpu
, p1
, p2
),
128 __field( int, count
)
129 __field( unsigned long long, p1
)
130 __field( unsigned long long, p2
)
131 __field( const char *, type
)
135 __entry
->count
= to_book3s(vcpu
)->hpte_cache_count
;
138 __entry
->type
= type
;
141 TP_printk("Flush %d %sPTEs: %llx - %llx",
142 __entry
->count
, __entry
->type
, __entry
->p1
, __entry
->p2
)
145 TRACE_EVENT(kvm_book3s_slb_found
,
146 TP_PROTO(unsigned long long gvsid
, unsigned long long hvsid
),
147 TP_ARGS(gvsid
, hvsid
),
150 __field( unsigned long long, gvsid
)
151 __field( unsigned long long, hvsid
)
155 __entry
->gvsid
= gvsid
;
156 __entry
->hvsid
= hvsid
;
159 TP_printk("%llx -> %llx", __entry
->gvsid
, __entry
->hvsid
)
162 TRACE_EVENT(kvm_book3s_slb_fail
,
163 TP_PROTO(u16 sid_map_mask
, unsigned long long gvsid
),
164 TP_ARGS(sid_map_mask
, gvsid
),
167 __field( unsigned short, sid_map_mask
)
168 __field( unsigned long long, gvsid
)
172 __entry
->sid_map_mask
= sid_map_mask
;
173 __entry
->gvsid
= gvsid
;
176 TP_printk("%x/%x: %llx", __entry
->sid_map_mask
,
177 SID_MAP_MASK
- __entry
->sid_map_mask
, __entry
->gvsid
)
180 TRACE_EVENT(kvm_book3s_slb_map
,
181 TP_PROTO(u16 sid_map_mask
, unsigned long long gvsid
,
182 unsigned long long hvsid
),
183 TP_ARGS(sid_map_mask
, gvsid
, hvsid
),
186 __field( unsigned short, sid_map_mask
)
187 __field( unsigned long long, guest_vsid
)
188 __field( unsigned long long, host_vsid
)
192 __entry
->sid_map_mask
= sid_map_mask
;
193 __entry
->guest_vsid
= gvsid
;
194 __entry
->host_vsid
= hvsid
;
197 TP_printk("%x: %llx -> %llx", __entry
->sid_map_mask
,
198 __entry
->guest_vsid
, __entry
->host_vsid
)
201 TRACE_EVENT(kvm_book3s_slbmte
,
202 TP_PROTO(u64 slb_vsid
, u64 slb_esid
),
203 TP_ARGS(slb_vsid
, slb_esid
),
206 __field( u64
, slb_vsid
)
207 __field( u64
, slb_esid
)
211 __entry
->slb_vsid
= slb_vsid
;
212 __entry
->slb_esid
= slb_esid
;
215 TP_printk("%llx, %llx", __entry
->slb_vsid
, __entry
->slb_esid
)
218 TRACE_EVENT(kvm_exit
,
219 TP_PROTO(unsigned int exit_nr
, struct kvm_vcpu
*vcpu
),
220 TP_ARGS(exit_nr
, vcpu
),
223 __field( unsigned int, exit_nr
)
224 __field( unsigned long, pc
)
225 __field( unsigned long, msr
)
226 __field( unsigned long, dar
)
227 __field( unsigned long, srr1
)
228 __field( unsigned long, last_inst
)
232 __entry
->exit_nr
= exit_nr
;
233 __entry
->pc
= kvmppc_get_pc(vcpu
);
234 __entry
->dar
= kvmppc_get_fault_dar(vcpu
);
235 __entry
->msr
= kvmppc_get_msr(vcpu
);
236 __entry
->srr1
= vcpu
->arch
.shadow_srr1
;
237 __entry
->last_inst
= vcpu
->arch
.last_inst
;
247 __print_symbolic(__entry
->exit_nr
, kvm_trace_symbol_exit
),
256 TRACE_EVENT(kvm_unmap_hva
,
257 TP_PROTO(unsigned long hva
),
261 __field( unsigned long, hva
)
268 TP_printk("unmap hva 0x%lx\n", __entry
->hva
)
271 #endif /* _TRACE_KVM_H */
273 /* This part must be outside protection */
274 #include <trace/define_trace.h>