1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #if !defined(_TRACE_KVMMMU_H) || defined(TRACE_HEADER_MULTI_READ) 3*4882a593Smuzhiyun #define _TRACE_KVMMMU_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/tracepoint.h> 6*4882a593Smuzhiyun #include <linux/trace_events.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #undef TRACE_SYSTEM 9*4882a593Smuzhiyun #define TRACE_SYSTEM kvmmmu 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define KVM_MMU_PAGE_FIELDS \ 12*4882a593Smuzhiyun __field(__u8, mmu_valid_gen) \ 13*4882a593Smuzhiyun __field(__u64, gfn) \ 14*4882a593Smuzhiyun __field(__u32, role) \ 15*4882a593Smuzhiyun __field(__u32, root_count) \ 16*4882a593Smuzhiyun __field(bool, unsync) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define KVM_MMU_PAGE_ASSIGN(sp) \ 19*4882a593Smuzhiyun __entry->mmu_valid_gen = sp->mmu_valid_gen; \ 20*4882a593Smuzhiyun __entry->gfn = sp->gfn; \ 21*4882a593Smuzhiyun __entry->role = sp->role.word; \ 22*4882a593Smuzhiyun __entry->root_count = sp->root_count; \ 23*4882a593Smuzhiyun __entry->unsync = sp->unsync; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define KVM_MMU_PAGE_PRINTK() ({ \ 26*4882a593Smuzhiyun const char *saved_ptr = trace_seq_buffer_ptr(p); \ 27*4882a593Smuzhiyun static const char *access_str[] = { \ 28*4882a593Smuzhiyun "---", "--x", "w--", "w-x", "-u-", "-ux", "wu-", "wux" \ 29*4882a593Smuzhiyun }; \ 30*4882a593Smuzhiyun union kvm_mmu_page_role role; \ 31*4882a593Smuzhiyun \ 32*4882a593Smuzhiyun role.word = __entry->role; \ 33*4882a593Smuzhiyun \ 34*4882a593Smuzhiyun trace_seq_printf(p, "sp gen %u gfn %llx l%u %u-byte q%u%s %s%s" \ 35*4882a593Smuzhiyun " %snxe %sad root %u %s%c", \ 36*4882a593Smuzhiyun __entry->mmu_valid_gen, \ 37*4882a593Smuzhiyun __entry->gfn, role.level, \ 38*4882a593Smuzhiyun role.gpte_is_8_bytes ? 8 : 4, \ 39*4882a593Smuzhiyun role.quadrant, \ 40*4882a593Smuzhiyun role.direct ? " direct" : "", \ 41*4882a593Smuzhiyun access_str[role.access], \ 42*4882a593Smuzhiyun role.invalid ? " invalid" : "", \ 43*4882a593Smuzhiyun role.nxe ? "" : "!", \ 44*4882a593Smuzhiyun role.ad_disabled ? "!" : "", \ 45*4882a593Smuzhiyun __entry->root_count, \ 46*4882a593Smuzhiyun __entry->unsync ? "unsync" : "sync", 0); \ 47*4882a593Smuzhiyun saved_ptr; \ 48*4882a593Smuzhiyun }) 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define kvm_mmu_trace_pferr_flags \ 51*4882a593Smuzhiyun { PFERR_PRESENT_MASK, "P" }, \ 52*4882a593Smuzhiyun { PFERR_WRITE_MASK, "W" }, \ 53*4882a593Smuzhiyun { PFERR_USER_MASK, "U" }, \ 54*4882a593Smuzhiyun { PFERR_RSVD_MASK, "RSVD" }, \ 55*4882a593Smuzhiyun { PFERR_FETCH_MASK, "F" } 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* 58*4882a593Smuzhiyun * A pagetable walk has started 59*4882a593Smuzhiyun */ 60*4882a593Smuzhiyun TRACE_EVENT( 61*4882a593Smuzhiyun kvm_mmu_pagetable_walk, 62*4882a593Smuzhiyun TP_PROTO(u64 addr, u32 pferr), 63*4882a593Smuzhiyun TP_ARGS(addr, pferr), 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun TP_STRUCT__entry( 66*4882a593Smuzhiyun __field(__u64, addr) 67*4882a593Smuzhiyun __field(__u32, pferr) 68*4882a593Smuzhiyun ), 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun TP_fast_assign( 71*4882a593Smuzhiyun __entry->addr = addr; 72*4882a593Smuzhiyun __entry->pferr = pferr; 73*4882a593Smuzhiyun ), 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun TP_printk("addr %llx pferr %x %s", __entry->addr, __entry->pferr, 76*4882a593Smuzhiyun __print_flags(__entry->pferr, "|", kvm_mmu_trace_pferr_flags)) 77*4882a593Smuzhiyun ); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun /* We just walked a paging element */ 81*4882a593Smuzhiyun TRACE_EVENT( 82*4882a593Smuzhiyun kvm_mmu_paging_element, 83*4882a593Smuzhiyun TP_PROTO(u64 pte, int level), 84*4882a593Smuzhiyun TP_ARGS(pte, level), 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun TP_STRUCT__entry( 87*4882a593Smuzhiyun __field(__u64, pte) 88*4882a593Smuzhiyun __field(__u32, level) 89*4882a593Smuzhiyun ), 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun TP_fast_assign( 92*4882a593Smuzhiyun __entry->pte = pte; 93*4882a593Smuzhiyun __entry->level = level; 94*4882a593Smuzhiyun ), 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun TP_printk("pte %llx level %u", __entry->pte, __entry->level) 97*4882a593Smuzhiyun ); 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun DECLARE_EVENT_CLASS(kvm_mmu_set_bit_class, 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun TP_PROTO(unsigned long table_gfn, unsigned index, unsigned size), 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun TP_ARGS(table_gfn, index, size), 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun TP_STRUCT__entry( 106*4882a593Smuzhiyun __field(__u64, gpa) 107*4882a593Smuzhiyun ), 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun TP_fast_assign( 110*4882a593Smuzhiyun __entry->gpa = ((u64)table_gfn << PAGE_SHIFT) 111*4882a593Smuzhiyun + index * size; 112*4882a593Smuzhiyun ), 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun TP_printk("gpa %llx", __entry->gpa) 115*4882a593Smuzhiyun ); 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* We set a pte accessed bit */ 118*4882a593Smuzhiyun DEFINE_EVENT(kvm_mmu_set_bit_class, kvm_mmu_set_accessed_bit, 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun TP_PROTO(unsigned long table_gfn, unsigned index, unsigned size), 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun TP_ARGS(table_gfn, index, size) 123*4882a593Smuzhiyun ); 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* We set a pte dirty bit */ 126*4882a593Smuzhiyun DEFINE_EVENT(kvm_mmu_set_bit_class, kvm_mmu_set_dirty_bit, 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun TP_PROTO(unsigned long table_gfn, unsigned index, unsigned size), 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun TP_ARGS(table_gfn, index, size) 131*4882a593Smuzhiyun ); 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun TRACE_EVENT( 134*4882a593Smuzhiyun kvm_mmu_walker_error, 135*4882a593Smuzhiyun TP_PROTO(u32 pferr), 136*4882a593Smuzhiyun TP_ARGS(pferr), 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun TP_STRUCT__entry( 139*4882a593Smuzhiyun __field(__u32, pferr) 140*4882a593Smuzhiyun ), 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun TP_fast_assign( 143*4882a593Smuzhiyun __entry->pferr = pferr; 144*4882a593Smuzhiyun ), 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun TP_printk("pferr %x %s", __entry->pferr, 147*4882a593Smuzhiyun __print_flags(__entry->pferr, "|", kvm_mmu_trace_pferr_flags)) 148*4882a593Smuzhiyun ); 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun TRACE_EVENT( 151*4882a593Smuzhiyun kvm_mmu_get_page, 152*4882a593Smuzhiyun TP_PROTO(struct kvm_mmu_page *sp, bool created), 153*4882a593Smuzhiyun TP_ARGS(sp, created), 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun TP_STRUCT__entry( 156*4882a593Smuzhiyun KVM_MMU_PAGE_FIELDS 157*4882a593Smuzhiyun __field(bool, created) 158*4882a593Smuzhiyun ), 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun TP_fast_assign( 161*4882a593Smuzhiyun KVM_MMU_PAGE_ASSIGN(sp) 162*4882a593Smuzhiyun __entry->created = created; 163*4882a593Smuzhiyun ), 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun TP_printk("%s %s", KVM_MMU_PAGE_PRINTK(), 166*4882a593Smuzhiyun __entry->created ? "new" : "existing") 167*4882a593Smuzhiyun ); 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun DECLARE_EVENT_CLASS(kvm_mmu_page_class, 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun TP_PROTO(struct kvm_mmu_page *sp), 172*4882a593Smuzhiyun TP_ARGS(sp), 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun TP_STRUCT__entry( 175*4882a593Smuzhiyun KVM_MMU_PAGE_FIELDS 176*4882a593Smuzhiyun ), 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun TP_fast_assign( 179*4882a593Smuzhiyun KVM_MMU_PAGE_ASSIGN(sp) 180*4882a593Smuzhiyun ), 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun TP_printk("%s", KVM_MMU_PAGE_PRINTK()) 183*4882a593Smuzhiyun ); 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun DEFINE_EVENT(kvm_mmu_page_class, kvm_mmu_sync_page, 186*4882a593Smuzhiyun TP_PROTO(struct kvm_mmu_page *sp), 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun TP_ARGS(sp) 189*4882a593Smuzhiyun ); 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun DEFINE_EVENT(kvm_mmu_page_class, kvm_mmu_unsync_page, 192*4882a593Smuzhiyun TP_PROTO(struct kvm_mmu_page *sp), 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun TP_ARGS(sp) 195*4882a593Smuzhiyun ); 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun DEFINE_EVENT(kvm_mmu_page_class, kvm_mmu_prepare_zap_page, 198*4882a593Smuzhiyun TP_PROTO(struct kvm_mmu_page *sp), 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun TP_ARGS(sp) 201*4882a593Smuzhiyun ); 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun TRACE_EVENT( 204*4882a593Smuzhiyun mark_mmio_spte, 205*4882a593Smuzhiyun TP_PROTO(u64 *sptep, gfn_t gfn, u64 spte), 206*4882a593Smuzhiyun TP_ARGS(sptep, gfn, spte), 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun TP_STRUCT__entry( 209*4882a593Smuzhiyun __field(void *, sptep) 210*4882a593Smuzhiyun __field(gfn_t, gfn) 211*4882a593Smuzhiyun __field(unsigned, access) 212*4882a593Smuzhiyun __field(unsigned int, gen) 213*4882a593Smuzhiyun ), 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun TP_fast_assign( 216*4882a593Smuzhiyun __entry->sptep = sptep; 217*4882a593Smuzhiyun __entry->gfn = gfn; 218*4882a593Smuzhiyun __entry->access = spte & ACC_ALL; 219*4882a593Smuzhiyun __entry->gen = get_mmio_spte_generation(spte); 220*4882a593Smuzhiyun ), 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun TP_printk("sptep:%p gfn %llx access %x gen %x", __entry->sptep, 223*4882a593Smuzhiyun __entry->gfn, __entry->access, __entry->gen) 224*4882a593Smuzhiyun ); 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun TRACE_EVENT( 227*4882a593Smuzhiyun handle_mmio_page_fault, 228*4882a593Smuzhiyun TP_PROTO(u64 addr, gfn_t gfn, unsigned access), 229*4882a593Smuzhiyun TP_ARGS(addr, gfn, access), 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun TP_STRUCT__entry( 232*4882a593Smuzhiyun __field(u64, addr) 233*4882a593Smuzhiyun __field(gfn_t, gfn) 234*4882a593Smuzhiyun __field(unsigned, access) 235*4882a593Smuzhiyun ), 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun TP_fast_assign( 238*4882a593Smuzhiyun __entry->addr = addr; 239*4882a593Smuzhiyun __entry->gfn = gfn; 240*4882a593Smuzhiyun __entry->access = access; 241*4882a593Smuzhiyun ), 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun TP_printk("addr:%llx gfn %llx access %x", __entry->addr, __entry->gfn, 244*4882a593Smuzhiyun __entry->access) 245*4882a593Smuzhiyun ); 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun TRACE_EVENT( 248*4882a593Smuzhiyun fast_page_fault, 249*4882a593Smuzhiyun TP_PROTO(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, u32 error_code, 250*4882a593Smuzhiyun u64 *sptep, u64 old_spte, int ret), 251*4882a593Smuzhiyun TP_ARGS(vcpu, cr2_or_gpa, error_code, sptep, old_spte, ret), 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun TP_STRUCT__entry( 254*4882a593Smuzhiyun __field(int, vcpu_id) 255*4882a593Smuzhiyun __field(gpa_t, cr2_or_gpa) 256*4882a593Smuzhiyun __field(u32, error_code) 257*4882a593Smuzhiyun __field(u64 *, sptep) 258*4882a593Smuzhiyun __field(u64, old_spte) 259*4882a593Smuzhiyun __field(u64, new_spte) 260*4882a593Smuzhiyun __field(int, ret) 261*4882a593Smuzhiyun ), 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun TP_fast_assign( 264*4882a593Smuzhiyun __entry->vcpu_id = vcpu->vcpu_id; 265*4882a593Smuzhiyun __entry->cr2_or_gpa = cr2_or_gpa; 266*4882a593Smuzhiyun __entry->error_code = error_code; 267*4882a593Smuzhiyun __entry->sptep = sptep; 268*4882a593Smuzhiyun __entry->old_spte = old_spte; 269*4882a593Smuzhiyun __entry->new_spte = *sptep; 270*4882a593Smuzhiyun __entry->ret = ret; 271*4882a593Smuzhiyun ), 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun TP_printk("vcpu %d gva %llx error_code %s sptep %p old %#llx" 274*4882a593Smuzhiyun " new %llx spurious %d fixed %d", __entry->vcpu_id, 275*4882a593Smuzhiyun __entry->cr2_or_gpa, __print_flags(__entry->error_code, "|", 276*4882a593Smuzhiyun kvm_mmu_trace_pferr_flags), __entry->sptep, 277*4882a593Smuzhiyun __entry->old_spte, __entry->new_spte, 278*4882a593Smuzhiyun __entry->ret == RET_PF_SPURIOUS, __entry->ret == RET_PF_FIXED 279*4882a593Smuzhiyun ) 280*4882a593Smuzhiyun ); 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun TRACE_EVENT( 283*4882a593Smuzhiyun kvm_mmu_zap_all_fast, 284*4882a593Smuzhiyun TP_PROTO(struct kvm *kvm), 285*4882a593Smuzhiyun TP_ARGS(kvm), 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun TP_STRUCT__entry( 288*4882a593Smuzhiyun __field(__u8, mmu_valid_gen) 289*4882a593Smuzhiyun __field(unsigned int, mmu_used_pages) 290*4882a593Smuzhiyun ), 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun TP_fast_assign( 293*4882a593Smuzhiyun __entry->mmu_valid_gen = kvm->arch.mmu_valid_gen; 294*4882a593Smuzhiyun __entry->mmu_used_pages = kvm->arch.n_used_mmu_pages; 295*4882a593Smuzhiyun ), 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun TP_printk("kvm-mmu-valid-gen %u used_pages %x", 298*4882a593Smuzhiyun __entry->mmu_valid_gen, __entry->mmu_used_pages 299*4882a593Smuzhiyun ) 300*4882a593Smuzhiyun ); 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun TRACE_EVENT( 304*4882a593Smuzhiyun check_mmio_spte, 305*4882a593Smuzhiyun TP_PROTO(u64 spte, unsigned int kvm_gen, unsigned int spte_gen), 306*4882a593Smuzhiyun TP_ARGS(spte, kvm_gen, spte_gen), 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun TP_STRUCT__entry( 309*4882a593Smuzhiyun __field(unsigned int, kvm_gen) 310*4882a593Smuzhiyun __field(unsigned int, spte_gen) 311*4882a593Smuzhiyun __field(u64, spte) 312*4882a593Smuzhiyun ), 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun TP_fast_assign( 315*4882a593Smuzhiyun __entry->kvm_gen = kvm_gen; 316*4882a593Smuzhiyun __entry->spte_gen = spte_gen; 317*4882a593Smuzhiyun __entry->spte = spte; 318*4882a593Smuzhiyun ), 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun TP_printk("spte %llx kvm_gen %x spte-gen %x valid %d", __entry->spte, 321*4882a593Smuzhiyun __entry->kvm_gen, __entry->spte_gen, 322*4882a593Smuzhiyun __entry->kvm_gen == __entry->spte_gen 323*4882a593Smuzhiyun ) 324*4882a593Smuzhiyun ); 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun TRACE_EVENT( 327*4882a593Smuzhiyun kvm_mmu_set_spte, 328*4882a593Smuzhiyun TP_PROTO(int level, gfn_t gfn, u64 *sptep), 329*4882a593Smuzhiyun TP_ARGS(level, gfn, sptep), 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun TP_STRUCT__entry( 332*4882a593Smuzhiyun __field(u64, gfn) 333*4882a593Smuzhiyun __field(u64, spte) 334*4882a593Smuzhiyun __field(u64, sptep) 335*4882a593Smuzhiyun __field(u8, level) 336*4882a593Smuzhiyun /* These depend on page entry type, so compute them now. */ 337*4882a593Smuzhiyun __field(bool, r) 338*4882a593Smuzhiyun __field(bool, x) 339*4882a593Smuzhiyun __field(signed char, u) 340*4882a593Smuzhiyun ), 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun TP_fast_assign( 343*4882a593Smuzhiyun __entry->gfn = gfn; 344*4882a593Smuzhiyun __entry->spte = *sptep; 345*4882a593Smuzhiyun __entry->sptep = virt_to_phys(sptep); 346*4882a593Smuzhiyun __entry->level = level; 347*4882a593Smuzhiyun __entry->r = shadow_present_mask || (__entry->spte & PT_PRESENT_MASK); 348*4882a593Smuzhiyun __entry->x = is_executable_pte(__entry->spte); 349*4882a593Smuzhiyun __entry->u = shadow_user_mask ? !!(__entry->spte & shadow_user_mask) : -1; 350*4882a593Smuzhiyun ), 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun TP_printk("gfn %llx spte %llx (%s%s%s%s) level %d at %llx", 353*4882a593Smuzhiyun __entry->gfn, __entry->spte, 354*4882a593Smuzhiyun __entry->r ? "r" : "-", 355*4882a593Smuzhiyun __entry->spte & PT_WRITABLE_MASK ? "w" : "-", 356*4882a593Smuzhiyun __entry->x ? "x" : "-", 357*4882a593Smuzhiyun __entry->u == -1 ? "" : (__entry->u ? "u" : "-"), 358*4882a593Smuzhiyun __entry->level, __entry->sptep 359*4882a593Smuzhiyun ) 360*4882a593Smuzhiyun ); 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun TRACE_EVENT( 363*4882a593Smuzhiyun kvm_mmu_spte_requested, 364*4882a593Smuzhiyun TP_PROTO(gpa_t addr, int level, kvm_pfn_t pfn), 365*4882a593Smuzhiyun TP_ARGS(addr, level, pfn), 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun TP_STRUCT__entry( 368*4882a593Smuzhiyun __field(u64, gfn) 369*4882a593Smuzhiyun __field(u64, pfn) 370*4882a593Smuzhiyun __field(u8, level) 371*4882a593Smuzhiyun ), 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun TP_fast_assign( 374*4882a593Smuzhiyun __entry->gfn = addr >> PAGE_SHIFT; 375*4882a593Smuzhiyun __entry->pfn = pfn | (__entry->gfn & (KVM_PAGES_PER_HPAGE(level) - 1)); 376*4882a593Smuzhiyun __entry->level = level; 377*4882a593Smuzhiyun ), 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun TP_printk("gfn %llx pfn %llx level %d", 380*4882a593Smuzhiyun __entry->gfn, __entry->pfn, __entry->level 381*4882a593Smuzhiyun ) 382*4882a593Smuzhiyun ); 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun #endif /* _TRACE_KVMMMU_H */ 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 387*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH mmu 388*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 389*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE mmutrace 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun /* This part must be outside protection */ 392*4882a593Smuzhiyun #include <trace/define_trace.h> 393