File Index
Files and directories
Sign in
FILE

trace.h

File preview with syntax highlighting.

linux-6.19.14/arch/loongarch/kvm/trace.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright (C) 2020-2023 Loongson Technology Corporation Limited
  4 */
  5
  6#if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
  7#define _TRACE_KVM_H
  8
  9#include <linux/tracepoint.h>
 10#include <asm/kvm_csr.h>
 11
 12#undef	TRACE_SYSTEM
 13#define TRACE_SYSTEM	kvm
 14
 15/*
 16 * Tracepoints for VM enters
 17 */
 18DECLARE_EVENT_CLASS(kvm_transition,
 19	TP_PROTO(struct kvm_vcpu *vcpu),
 20	TP_ARGS(vcpu),
 21	TP_STRUCT__entry(
 22		__field(unsigned int, vcpu_id)
 23		__field(unsigned long, pc)
 24	),
 25
 26	TP_fast_assign(
 27		__entry->vcpu_id = vcpu->vcpu_id;
 28		__entry->pc = vcpu->arch.pc;
 29	),
 30
 31	TP_printk("vcpu %u PC: 0x%08lx", __entry->vcpu_id, __entry->pc)
 32);
 33
 34DEFINE_EVENT(kvm_transition, kvm_enter,
 35	     TP_PROTO(struct kvm_vcpu *vcpu),
 36	     TP_ARGS(vcpu));
 37
 38DEFINE_EVENT(kvm_transition, kvm_reenter,
 39	     TP_PROTO(struct kvm_vcpu *vcpu),
 40	     TP_ARGS(vcpu));
 41
 42DEFINE_EVENT(kvm_transition, kvm_out,
 43	     TP_PROTO(struct kvm_vcpu *vcpu),
 44	     TP_ARGS(vcpu));
 45
 46/* Further exit reasons */
 47#define KVM_TRACE_EXIT_IDLE		64
 48#define KVM_TRACE_EXIT_CACHE		65
 49#define KVM_TRACE_EXIT_CPUCFG		66
 50#define KVM_TRACE_EXIT_CSR		67
 51
 52/* Tracepoints for VM exits */
 53#define kvm_trace_symbol_exit_types			\
 54	{ KVM_TRACE_EXIT_IDLE,		"IDLE" },	\
 55	{ KVM_TRACE_EXIT_CACHE,		"CACHE" },	\
 56	{ KVM_TRACE_EXIT_CPUCFG,	"CPUCFG" },	\
 57	{ KVM_TRACE_EXIT_CSR,		"CSR" }
 58
 59DECLARE_EVENT_CLASS(kvm_exit,
 60	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 61	    TP_ARGS(vcpu, reason),
 62	    TP_STRUCT__entry(
 63			__field(unsigned int, vcpu_id)
 64			__field(unsigned long, pc)
 65			__field(unsigned int, reason)
 66	    ),
 67
 68	    TP_fast_assign(
 69			__entry->vcpu_id = vcpu->vcpu_id;
 70			__entry->pc = vcpu->arch.pc;
 71			__entry->reason = reason;
 72	    ),
 73
 74	    TP_printk("vcpu %u [%s] PC: 0x%08lx",
 75			__entry->vcpu_id,
 76			__print_symbolic(__entry->reason,
 77				kvm_trace_symbol_exit_types),
 78			__entry->pc)
 79);
 80
 81DEFINE_EVENT(kvm_exit, kvm_exit_idle,
 82	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 83	     TP_ARGS(vcpu, reason));
 84
 85DEFINE_EVENT(kvm_exit, kvm_exit_cache,
 86	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 87	     TP_ARGS(vcpu, reason));
 88
 89DEFINE_EVENT(kvm_exit, kvm_exit_cpucfg,
 90	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 91	     TP_ARGS(vcpu, reason));
 92
 93DEFINE_EVENT(kvm_exit, kvm_exit_csr,
 94	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 95	     TP_ARGS(vcpu, reason));
 96
 97DEFINE_EVENT(kvm_exit, kvm_exit,
 98	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 99	     TP_ARGS(vcpu, reason));
100
101TRACE_EVENT(kvm_exit_gspr,
102	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int inst_word),
103	    TP_ARGS(vcpu, inst_word),
104	    TP_STRUCT__entry(
105			__field(unsigned int, vcpu_id)
106			__field(unsigned int, inst_word)
107	    ),
108
109	    TP_fast_assign(
110			__entry->vcpu_id = vcpu->vcpu_id;
111			__entry->inst_word = inst_word;
112	    ),
113
114	    TP_printk("vcpu %u Inst word: 0x%08x", __entry->vcpu_id,
115			__entry->inst_word)
116);
117
118#define KVM_TRACE_AUX_SAVE		0
119#define KVM_TRACE_AUX_RESTORE		1
120#define KVM_TRACE_AUX_ENABLE		2
121#define KVM_TRACE_AUX_DISABLE		3
122#define KVM_TRACE_AUX_DISCARD		4
123
124#define KVM_TRACE_AUX_FPU		1
125#define KVM_TRACE_AUX_LSX		2
126#define KVM_TRACE_AUX_LASX		3
127
128#define kvm_trace_symbol_aux_op				\
129	{ KVM_TRACE_AUX_SAVE,		"save" },	\
130	{ KVM_TRACE_AUX_RESTORE,	"restore" },	\
131	{ KVM_TRACE_AUX_ENABLE,		"enable" },	\
132	{ KVM_TRACE_AUX_DISABLE,	"disable" },	\
133	{ KVM_TRACE_AUX_DISCARD,	"discard" }
134
135#define kvm_trace_symbol_aux_state			\
136	{ KVM_TRACE_AUX_FPU,     "FPU" },		\
137	{ KVM_TRACE_AUX_LSX,     "LSX" },		\
138	{ KVM_TRACE_AUX_LASX,    "LASX" }
139
140TRACE_EVENT(kvm_aux,
141	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op,
142		     unsigned int state),
143	    TP_ARGS(vcpu, op, state),
144	    TP_STRUCT__entry(
145			__field(unsigned long, pc)
146			__field(u8, op)
147			__field(u8, state)
148	    ),
149
150	    TP_fast_assign(
151			__entry->pc = vcpu->arch.pc;
152			__entry->op = op;
153			__entry->state = state;
154	    ),
155
156	    TP_printk("%s %s PC: 0x%08lx",
157		      __print_symbolic(__entry->op,
158				       kvm_trace_symbol_aux_op),
159		      __print_symbolic(__entry->state,
160				       kvm_trace_symbol_aux_state),
161		      __entry->pc)
162);
163
164#define KVM_TRACE_IOCSR_READ_UNSATISFIED 0
165#define KVM_TRACE_IOCSR_READ 1
166#define KVM_TRACE_IOCSR_WRITE 2
167
168#define kvm_trace_symbol_iocsr \
169	{ KVM_TRACE_IOCSR_READ_UNSATISFIED, "unsatisfied-read" }, \
170	{ KVM_TRACE_IOCSR_READ, "read" }, \
171	{ KVM_TRACE_IOCSR_WRITE, "write" }
172
173TRACE_EVENT(kvm_iocsr,
174	TP_PROTO(int type, int len, u64 gpa, void *val),
175	TP_ARGS(type, len, gpa, val),
176
177	TP_STRUCT__entry(
178		__field(	u32,	type	)
179		__field(	u32,	len	)
180		__field(	u64,	gpa	)
181		__field(	u64,	val	)
182	),
183
184	TP_fast_assign(
185		__entry->type		= type;
186		__entry->len		= len;
187		__entry->gpa		= gpa;
188		__entry->val		= 0;
189		if (val)
190			memcpy(&__entry->val, val,
191			       min_t(u32, sizeof(__entry->val), len));
192	),
193
194	TP_printk("iocsr %s len %u gpa 0x%llx val 0x%llx",
195		  __print_symbolic(__entry->type, kvm_trace_symbol_iocsr),
196		  __entry->len, __entry->gpa, __entry->val)
197);
198
199TRACE_EVENT(kvm_vpid_change,
200	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned long vpid),
201	    TP_ARGS(vcpu, vpid),
202	    TP_STRUCT__entry(
203			__field(unsigned long, vpid)
204	    ),
205
206	    TP_fast_assign(
207			__entry->vpid = vpid;
208	    ),
209
210	    TP_printk("VPID: 0x%08lx", __entry->vpid)
211);
212
213#endif /* _TRACE_KVM_H */
214
215#undef TRACE_INCLUDE_PATH
216#define TRACE_INCLUDE_PATH ../../arch/loongarch/kvm
217#undef TRACE_INCLUDE_FILE
218#define TRACE_INCLUDE_FILE trace
219
220/* This part must be outside protection */
221#include <trace/define_trace.h>
~/ Read-only file preview.