xref: /linux/arch/powerpc/kvm/trace_booke.h (revision 501b9185)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2dba291f2SAneesh Kumar K.V #if !defined(_TRACE_KVM_BOOKE_H) || defined(TRACE_HEADER_MULTI_READ)
3dba291f2SAneesh Kumar K.V #define _TRACE_KVM_BOOKE_H
4dba291f2SAneesh Kumar K.V 
5dba291f2SAneesh Kumar K.V #include <linux/tracepoint.h>
6dba291f2SAneesh Kumar K.V 
7dba291f2SAneesh Kumar K.V #undef TRACE_SYSTEM
8dba291f2SAneesh Kumar K.V #define TRACE_SYSTEM kvm_booke
9dba291f2SAneesh Kumar K.V 
10dba291f2SAneesh Kumar K.V #define kvm_trace_symbol_exit \
11dba291f2SAneesh Kumar K.V 	{0, "CRITICAL"}, \
12dba291f2SAneesh Kumar K.V 	{1, "MACHINE_CHECK"}, \
13dba291f2SAneesh Kumar K.V 	{2, "DATA_STORAGE"}, \
14dba291f2SAneesh Kumar K.V 	{3, "INST_STORAGE"}, \
15dba291f2SAneesh Kumar K.V 	{4, "EXTERNAL"}, \
16dba291f2SAneesh Kumar K.V 	{5, "ALIGNMENT"}, \
17dba291f2SAneesh Kumar K.V 	{6, "PROGRAM"}, \
18dba291f2SAneesh Kumar K.V 	{7, "FP_UNAVAIL"}, \
19dba291f2SAneesh Kumar K.V 	{8, "SYSCALL"}, \
20dba291f2SAneesh Kumar K.V 	{9, "AP_UNAVAIL"}, \
21dba291f2SAneesh Kumar K.V 	{10, "DECREMENTER"}, \
22dba291f2SAneesh Kumar K.V 	{11, "FIT"}, \
23dba291f2SAneesh Kumar K.V 	{12, "WATCHDOG"}, \
24dba291f2SAneesh Kumar K.V 	{13, "DTLB_MISS"}, \
25dba291f2SAneesh Kumar K.V 	{14, "ITLB_MISS"}, \
26dba291f2SAneesh Kumar K.V 	{15, "DEBUG"}, \
27dba291f2SAneesh Kumar K.V 	{32, "SPE_UNAVAIL"}, \
28dba291f2SAneesh Kumar K.V 	{33, "SPE_FP_DATA"}, \
29dba291f2SAneesh Kumar K.V 	{34, "SPE_FP_ROUND"}, \
30dba291f2SAneesh Kumar K.V 	{35, "PERFORMANCE_MONITOR"}, \
31dba291f2SAneesh Kumar K.V 	{36, "DOORBELL"}, \
32dba291f2SAneesh Kumar K.V 	{37, "DOORBELL_CRITICAL"}, \
33dba291f2SAneesh Kumar K.V 	{38, "GUEST_DBELL"}, \
34dba291f2SAneesh Kumar K.V 	{39, "GUEST_DBELL_CRIT"}, \
35dba291f2SAneesh Kumar K.V 	{40, "HV_SYSCALL"}, \
36dba291f2SAneesh Kumar K.V 	{41, "HV_PRIV"}
37dba291f2SAneesh Kumar K.V 
38dba291f2SAneesh Kumar K.V TRACE_EVENT(kvm_exit,
39dba291f2SAneesh Kumar K.V 	TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu),
40dba291f2SAneesh Kumar K.V 	TP_ARGS(exit_nr, vcpu),
41dba291f2SAneesh Kumar K.V 
42dba291f2SAneesh Kumar K.V 	TP_STRUCT__entry(
43dba291f2SAneesh Kumar K.V 		__field(	unsigned int,	exit_nr		)
44dba291f2SAneesh Kumar K.V 		__field(	unsigned long,	pc		)
45dba291f2SAneesh Kumar K.V 		__field(	unsigned long,	msr		)
46dba291f2SAneesh Kumar K.V 		__field(	unsigned long,	dar		)
47dba291f2SAneesh Kumar K.V 		__field(	unsigned long,	last_inst	)
48dba291f2SAneesh Kumar K.V 	),
49dba291f2SAneesh Kumar K.V 
50dba291f2SAneesh Kumar K.V 	TP_fast_assign(
51dba291f2SAneesh Kumar K.V 		__entry->exit_nr	= exit_nr;
52dba291f2SAneesh Kumar K.V 		__entry->pc		= kvmppc_get_pc(vcpu);
53dba291f2SAneesh Kumar K.V 		__entry->dar		= kvmppc_get_fault_dar(vcpu);
54dba291f2SAneesh Kumar K.V 		__entry->msr		= vcpu->arch.shared->msr;
55dba291f2SAneesh Kumar K.V 		__entry->last_inst	= vcpu->arch.last_inst;
56dba291f2SAneesh Kumar K.V 	),
57dba291f2SAneesh Kumar K.V 
58dba291f2SAneesh Kumar K.V 	TP_printk("exit=%s"
59dba291f2SAneesh Kumar K.V 		" | pc=0x%lx"
60dba291f2SAneesh Kumar K.V 		" | msr=0x%lx"
61dba291f2SAneesh Kumar K.V 		" | dar=0x%lx"
62dba291f2SAneesh Kumar K.V 		" | last_inst=0x%lx"
63dba291f2SAneesh Kumar K.V 		,
64dba291f2SAneesh Kumar K.V 		__print_symbolic(__entry->exit_nr, kvm_trace_symbol_exit),
65dba291f2SAneesh Kumar K.V 		__entry->pc,
66dba291f2SAneesh Kumar K.V 		__entry->msr,
67dba291f2SAneesh Kumar K.V 		__entry->dar,
68dba291f2SAneesh Kumar K.V 		__entry->last_inst
69dba291f2SAneesh Kumar K.V 		)
70dba291f2SAneesh Kumar K.V );
71dba291f2SAneesh Kumar K.V 
72dba291f2SAneesh Kumar K.V TRACE_EVENT(kvm_booke206_stlb_write,
73dba291f2SAneesh Kumar K.V 	TP_PROTO(__u32 mas0, __u32 mas8, __u32 mas1, __u64 mas2, __u64 mas7_3),
74dba291f2SAneesh Kumar K.V 	TP_ARGS(mas0, mas8, mas1, mas2, mas7_3),
75dba291f2SAneesh Kumar K.V 
76dba291f2SAneesh Kumar K.V 	TP_STRUCT__entry(
77dba291f2SAneesh Kumar K.V 		__field(	__u32,	mas0		)
78dba291f2SAneesh Kumar K.V 		__field(	__u32,	mas8		)
79dba291f2SAneesh Kumar K.V 		__field(	__u32,	mas1		)
80dba291f2SAneesh Kumar K.V 		__field(	__u64,	mas2		)
81dba291f2SAneesh Kumar K.V 		__field(	__u64,	mas7_3		)
82dba291f2SAneesh Kumar K.V 	),
83dba291f2SAneesh Kumar K.V 
84dba291f2SAneesh Kumar K.V 	TP_fast_assign(
85dba291f2SAneesh Kumar K.V 		__entry->mas0		= mas0;
86dba291f2SAneesh Kumar K.V 		__entry->mas8		= mas8;
87dba291f2SAneesh Kumar K.V 		__entry->mas1		= mas1;
88dba291f2SAneesh Kumar K.V 		__entry->mas2		= mas2;
89dba291f2SAneesh Kumar K.V 		__entry->mas7_3		= mas7_3;
90dba291f2SAneesh Kumar K.V 	),
91dba291f2SAneesh Kumar K.V 
92dba291f2SAneesh Kumar K.V 	TP_printk("mas0=%x mas8=%x mas1=%x mas2=%llx mas7_3=%llx",
93dba291f2SAneesh Kumar K.V 		__entry->mas0, __entry->mas8, __entry->mas1,
94dba291f2SAneesh Kumar K.V 		__entry->mas2, __entry->mas7_3)
95dba291f2SAneesh Kumar K.V );
96dba291f2SAneesh Kumar K.V 
97dba291f2SAneesh Kumar K.V TRACE_EVENT(kvm_booke206_gtlb_write,
98dba291f2SAneesh Kumar K.V 	TP_PROTO(__u32 mas0, __u32 mas1, __u64 mas2, __u64 mas7_3),
99dba291f2SAneesh Kumar K.V 	TP_ARGS(mas0, mas1, mas2, mas7_3),
100dba291f2SAneesh Kumar K.V 
101dba291f2SAneesh Kumar K.V 	TP_STRUCT__entry(
102dba291f2SAneesh Kumar K.V 		__field(	__u32,	mas0		)
103dba291f2SAneesh Kumar K.V 		__field(	__u32,	mas1		)
104dba291f2SAneesh Kumar K.V 		__field(	__u64,	mas2		)
105dba291f2SAneesh Kumar K.V 		__field(	__u64,	mas7_3		)
106dba291f2SAneesh Kumar K.V 	),
107dba291f2SAneesh Kumar K.V 
108dba291f2SAneesh Kumar K.V 	TP_fast_assign(
109dba291f2SAneesh Kumar K.V 		__entry->mas0		= mas0;
110dba291f2SAneesh Kumar K.V 		__entry->mas1		= mas1;
111dba291f2SAneesh Kumar K.V 		__entry->mas2		= mas2;
112dba291f2SAneesh Kumar K.V 		__entry->mas7_3		= mas7_3;
113dba291f2SAneesh Kumar K.V 	),
114dba291f2SAneesh Kumar K.V 
115dba291f2SAneesh Kumar K.V 	TP_printk("mas0=%x mas1=%x mas2=%llx mas7_3=%llx",
116dba291f2SAneesh Kumar K.V 		__entry->mas0, __entry->mas1,
117dba291f2SAneesh Kumar K.V 		__entry->mas2, __entry->mas7_3)
118dba291f2SAneesh Kumar K.V );
119dba291f2SAneesh Kumar K.V 
120dba291f2SAneesh Kumar K.V TRACE_EVENT(kvm_booke206_ref_release,
121dba291f2SAneesh Kumar K.V 	TP_PROTO(__u64 pfn, __u32 flags),
122dba291f2SAneesh Kumar K.V 	TP_ARGS(pfn, flags),
123dba291f2SAneesh Kumar K.V 
124dba291f2SAneesh Kumar K.V 	TP_STRUCT__entry(
125dba291f2SAneesh Kumar K.V 		__field(	__u64,	pfn		)
126dba291f2SAneesh Kumar K.V 		__field(	__u32,	flags		)
127dba291f2SAneesh Kumar K.V 	),
128dba291f2SAneesh Kumar K.V 
129dba291f2SAneesh Kumar K.V 	TP_fast_assign(
130dba291f2SAneesh Kumar K.V 		__entry->pfn		= pfn;
131dba291f2SAneesh Kumar K.V 		__entry->flags		= flags;
132dba291f2SAneesh Kumar K.V 	),
133dba291f2SAneesh Kumar K.V 
134dba291f2SAneesh Kumar K.V 	TP_printk("pfn=%llx flags=%x",
135dba291f2SAneesh Kumar K.V 		__entry->pfn, __entry->flags)
136dba291f2SAneesh Kumar K.V );
137dba291f2SAneesh Kumar K.V 
138b6b61257SAlexander Graf #ifdef CONFIG_SPE_POSSIBLE
139b6b61257SAlexander Graf #define kvm_trace_symbol_irqprio_spe \
140b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_SPE_UNAVAIL, "SPE_UNAVAIL"}, \
141b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_SPE_FP_DATA, "SPE_FP_DATA"}, \
142b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_SPE_FP_ROUND, "SPE_FP_ROUND"},
143b6b61257SAlexander Graf #else
144b6b61257SAlexander Graf #define kvm_trace_symbol_irqprio_spe
145b6b61257SAlexander Graf #endif
146b6b61257SAlexander Graf 
147b6b61257SAlexander Graf #ifdef CONFIG_PPC_E500MC
148b6b61257SAlexander Graf #define kvm_trace_symbol_irqprio_e500mc \
149b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_ALTIVEC_UNAVAIL, "ALTIVEC_UNAVAIL"}, \
150b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_ALTIVEC_ASSIST, "ALTIVEC_ASSIST"},
151b6b61257SAlexander Graf #else
152b6b61257SAlexander Graf #define kvm_trace_symbol_irqprio_e500mc
153b6b61257SAlexander Graf #endif
154b6b61257SAlexander Graf 
155b6b61257SAlexander Graf #define kvm_trace_symbol_irqprio \
156b6b61257SAlexander Graf 	kvm_trace_symbol_irqprio_spe \
157b6b61257SAlexander Graf 	kvm_trace_symbol_irqprio_e500mc \
158b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_DATA_STORAGE, "DATA_STORAGE"}, \
159b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_INST_STORAGE, "INST_STORAGE"}, \
160b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_ALIGNMENT, "ALIGNMENT"}, \
161b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_PROGRAM, "PROGRAM"}, \
162b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_FP_UNAVAIL, "FP_UNAVAIL"}, \
163b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_SYSCALL, "SYSCALL"}, \
164b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_AP_UNAVAIL, "AP_UNAVAIL"}, \
165b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_DTLB_MISS, "DTLB_MISS"}, \
166b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_ITLB_MISS, "ITLB_MISS"}, \
167b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_MACHINE_CHECK, "MACHINE_CHECK"}, \
168b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_DEBUG, "DEBUG"}, \
169b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_CRITICAL, "CRITICAL"}, \
170b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_WATCHDOG, "WATCHDOG"}, \
171b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_EXTERNAL, "EXTERNAL"}, \
172b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_FIT, "FIT"}, \
173b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_DECREMENTER, "DECREMENTER"}, \
174b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_PERFORMANCE_MONITOR, "PERFORMANCE_MONITOR"}, \
175b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_EXTERNAL_LEVEL, "EXTERNAL_LEVEL"}, \
176b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_DBELL, "DBELL"}, \
177b6b61257SAlexander Graf 	{BOOKE_IRQPRIO_DBELL_CRIT, "DBELL_CRIT"} \
178b6b61257SAlexander Graf 
179dba291f2SAneesh Kumar K.V TRACE_EVENT(kvm_booke_queue_irqprio,
180dba291f2SAneesh Kumar K.V 	TP_PROTO(struct kvm_vcpu *vcpu, unsigned int priority),
181dba291f2SAneesh Kumar K.V 	TP_ARGS(vcpu, priority),
182dba291f2SAneesh Kumar K.V 
183dba291f2SAneesh Kumar K.V 	TP_STRUCT__entry(
184dba291f2SAneesh Kumar K.V 		__field(	__u32,	cpu_nr		)
185dba291f2SAneesh Kumar K.V 		__field(	__u32,	priority		)
186dba291f2SAneesh Kumar K.V 		__field(	unsigned long,	pending		)
187dba291f2SAneesh Kumar K.V 	),
188dba291f2SAneesh Kumar K.V 
189dba291f2SAneesh Kumar K.V 	TP_fast_assign(
190dba291f2SAneesh Kumar K.V 		__entry->cpu_nr		= vcpu->vcpu_id;
191dba291f2SAneesh Kumar K.V 		__entry->priority	= priority;
192dba291f2SAneesh Kumar K.V 		__entry->pending	= vcpu->arch.pending_exceptions;
193dba291f2SAneesh Kumar K.V 	),
194dba291f2SAneesh Kumar K.V 
195b6b61257SAlexander Graf 	TP_printk("vcpu=%x prio=%s pending=%lx",
196b6b61257SAlexander Graf 		__entry->cpu_nr,
197b6b61257SAlexander Graf 		__print_symbolic(__entry->priority, kvm_trace_symbol_irqprio),
198b6b61257SAlexander Graf 		__entry->pending)
199dba291f2SAneesh Kumar K.V );
200dba291f2SAneesh Kumar K.V 
201dba291f2SAneesh Kumar K.V #endif
202dba291f2SAneesh Kumar K.V 
203dba291f2SAneesh Kumar K.V /* This part must be outside protection */
204*28c5bcf7SScott Wood 
205*28c5bcf7SScott Wood #undef TRACE_INCLUDE_PATH
206*28c5bcf7SScott Wood #undef TRACE_INCLUDE_FILE
207*28c5bcf7SScott Wood 
208*28c5bcf7SScott Wood #define TRACE_INCLUDE_PATH .
209*28c5bcf7SScott Wood #define TRACE_INCLUDE_FILE trace_booke
210*28c5bcf7SScott Wood 
211dba291f2SAneesh Kumar K.V #include <trace/define_trace.h>
212