diff options
Diffstat (limited to 'arch/x86/kvm/mmutrace.h')
-rw-r--r-- | arch/x86/kvm/mmutrace.h | 76 |
1 files changed, 62 insertions, 14 deletions
diff --git a/arch/x86/kvm/mmutrace.h b/arch/x86/kvm/mmutrace.h index b8f6172f4174..9d2e0ffcb190 100644 --- a/arch/x86/kvm/mmutrace.h +++ b/arch/x86/kvm/mmutrace.h | |||
@@ -7,16 +7,18 @@ | |||
7 | #undef TRACE_SYSTEM | 7 | #undef TRACE_SYSTEM |
8 | #define TRACE_SYSTEM kvmmmu | 8 | #define TRACE_SYSTEM kvmmmu |
9 | 9 | ||
10 | #define KVM_MMU_PAGE_FIELDS \ | 10 | #define KVM_MMU_PAGE_FIELDS \ |
11 | __field(__u64, gfn) \ | 11 | __field(unsigned long, mmu_valid_gen) \ |
12 | __field(__u32, role) \ | 12 | __field(__u64, gfn) \ |
13 | __field(__u32, root_count) \ | 13 | __field(__u32, role) \ |
14 | __field(__u32, root_count) \ | ||
14 | __field(bool, unsync) | 15 | __field(bool, unsync) |
15 | 16 | ||
16 | #define KVM_MMU_PAGE_ASSIGN(sp) \ | 17 | #define KVM_MMU_PAGE_ASSIGN(sp) \ |
17 | __entry->gfn = sp->gfn; \ | 18 | __entry->mmu_valid_gen = sp->mmu_valid_gen; \ |
18 | __entry->role = sp->role.word; \ | 19 | __entry->gfn = sp->gfn; \ |
19 | __entry->root_count = sp->root_count; \ | 20 | __entry->role = sp->role.word; \ |
21 | __entry->root_count = sp->root_count; \ | ||
20 | __entry->unsync = sp->unsync; | 22 | __entry->unsync = sp->unsync; |
21 | 23 | ||
22 | #define KVM_MMU_PAGE_PRINTK() ({ \ | 24 | #define KVM_MMU_PAGE_PRINTK() ({ \ |
@@ -28,8 +30,8 @@ | |||
28 | \ | 30 | \ |
29 | role.word = __entry->role; \ | 31 | role.word = __entry->role; \ |
30 | \ | 32 | \ |
31 | trace_seq_printf(p, "sp gfn %llx %u%s q%u%s %s%s" \ | 33 | trace_seq_printf(p, "sp gen %lx gfn %llx %u%s q%u%s %s%s" \ |
32 | " %snxe root %u %s%c", \ | 34 | " %snxe root %u %s%c", __entry->mmu_valid_gen, \ |
33 | __entry->gfn, role.level, \ | 35 | __entry->gfn, role.level, \ |
34 | role.cr4_pae ? " pae" : "", \ | 36 | role.cr4_pae ? " pae" : "", \ |
35 | role.quadrant, \ | 37 | role.quadrant, \ |
@@ -197,23 +199,25 @@ DEFINE_EVENT(kvm_mmu_page_class, kvm_mmu_prepare_zap_page, | |||
197 | 199 | ||
198 | TRACE_EVENT( | 200 | TRACE_EVENT( |
199 | mark_mmio_spte, | 201 | mark_mmio_spte, |
200 | TP_PROTO(u64 *sptep, gfn_t gfn, unsigned access), | 202 | TP_PROTO(u64 *sptep, gfn_t gfn, unsigned access, unsigned int gen), |
201 | TP_ARGS(sptep, gfn, access), | 203 | TP_ARGS(sptep, gfn, access, gen), |
202 | 204 | ||
203 | TP_STRUCT__entry( | 205 | TP_STRUCT__entry( |
204 | __field(void *, sptep) | 206 | __field(void *, sptep) |
205 | __field(gfn_t, gfn) | 207 | __field(gfn_t, gfn) |
206 | __field(unsigned, access) | 208 | __field(unsigned, access) |
209 | __field(unsigned int, gen) | ||
207 | ), | 210 | ), |
208 | 211 | ||
209 | TP_fast_assign( | 212 | TP_fast_assign( |
210 | __entry->sptep = sptep; | 213 | __entry->sptep = sptep; |
211 | __entry->gfn = gfn; | 214 | __entry->gfn = gfn; |
212 | __entry->access = access; | 215 | __entry->access = access; |
216 | __entry->gen = gen; | ||
213 | ), | 217 | ), |
214 | 218 | ||
215 | TP_printk("sptep:%p gfn %llx access %x", __entry->sptep, __entry->gfn, | 219 | TP_printk("sptep:%p gfn %llx access %x gen %x", __entry->sptep, |
216 | __entry->access) | 220 | __entry->gfn, __entry->access, __entry->gen) |
217 | ); | 221 | ); |
218 | 222 | ||
219 | TRACE_EVENT( | 223 | TRACE_EVENT( |
@@ -274,6 +278,50 @@ TRACE_EVENT( | |||
274 | __spte_satisfied(old_spte), __spte_satisfied(new_spte) | 278 | __spte_satisfied(old_spte), __spte_satisfied(new_spte) |
275 | ) | 279 | ) |
276 | ); | 280 | ); |
281 | |||
282 | TRACE_EVENT( | ||
283 | kvm_mmu_invalidate_zap_all_pages, | ||
284 | TP_PROTO(struct kvm *kvm), | ||
285 | TP_ARGS(kvm), | ||
286 | |||
287 | TP_STRUCT__entry( | ||
288 | __field(unsigned long, mmu_valid_gen) | ||
289 | __field(unsigned int, mmu_used_pages) | ||
290 | ), | ||
291 | |||
292 | TP_fast_assign( | ||
293 | __entry->mmu_valid_gen = kvm->arch.mmu_valid_gen; | ||
294 | __entry->mmu_used_pages = kvm->arch.n_used_mmu_pages; | ||
295 | ), | ||
296 | |||
297 | TP_printk("kvm-mmu-valid-gen %lx used_pages %x", | ||
298 | __entry->mmu_valid_gen, __entry->mmu_used_pages | ||
299 | ) | ||
300 | ); | ||
301 | |||
302 | |||
303 | TRACE_EVENT( | ||
304 | check_mmio_spte, | ||
305 | TP_PROTO(u64 spte, unsigned int kvm_gen, unsigned int spte_gen), | ||
306 | TP_ARGS(spte, kvm_gen, spte_gen), | ||
307 | |||
308 | TP_STRUCT__entry( | ||
309 | __field(unsigned int, kvm_gen) | ||
310 | __field(unsigned int, spte_gen) | ||
311 | __field(u64, spte) | ||
312 | ), | ||
313 | |||
314 | TP_fast_assign( | ||
315 | __entry->kvm_gen = kvm_gen; | ||
316 | __entry->spte_gen = spte_gen; | ||
317 | __entry->spte = spte; | ||
318 | ), | ||
319 | |||
320 | TP_printk("spte %llx kvm_gen %x spte-gen %x valid %d", __entry->spte, | ||
321 | __entry->kvm_gen, __entry->spte_gen, | ||
322 | __entry->kvm_gen == __entry->spte_gen | ||
323 | ) | ||
324 | ); | ||
277 | #endif /* _TRACE_KVMMMU_H */ | 325 | #endif /* _TRACE_KVMMMU_H */ |
278 | 326 | ||
279 | #undef TRACE_INCLUDE_PATH | 327 | #undef TRACE_INCLUDE_PATH |