Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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