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 long, pc)
23 ),
24
25 TP_fast_assign(
26 __entry->pc = vcpu->arch.pc;
27 ),
28
29 TP_printk("PC: 0x%08lx", __entry->pc)
30);
31
32DEFINE_EVENT(kvm_transition, kvm_enter,
33 TP_PROTO(struct kvm_vcpu *vcpu),
34 TP_ARGS(vcpu));
35
36DEFINE_EVENT(kvm_transition, kvm_reenter,
37 TP_PROTO(struct kvm_vcpu *vcpu),
38 TP_ARGS(vcpu));
39
40DEFINE_EVENT(kvm_transition, kvm_out,
41 TP_PROTO(struct kvm_vcpu *vcpu),
42 TP_ARGS(vcpu));
43
44/* Further exit reasons */
45#define KVM_TRACE_EXIT_IDLE 64
46#define KVM_TRACE_EXIT_CACHE 65
47
48/* Tracepoints for VM exits */
49#define kvm_trace_symbol_exit_types \
50 { KVM_TRACE_EXIT_IDLE, "IDLE" }, \
51 { KVM_TRACE_EXIT_CACHE, "CACHE" }
52
53DECLARE_EVENT_CLASS(kvm_exit,
54 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
55 TP_ARGS(vcpu, reason),
56 TP_STRUCT__entry(
57 __field(unsigned long, pc)
58 __field(unsigned int, reason)
59 ),
60
61 TP_fast_assign(
62 __entry->pc = vcpu->arch.pc;
63 __entry->reason = reason;
64 ),
65
66 TP_printk("[%s]PC: 0x%08lx",
67 __print_symbolic(__entry->reason,
68 kvm_trace_symbol_exit_types),
69 __entry->pc)
70);
71
72DEFINE_EVENT(kvm_exit, kvm_exit_idle,
73 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
74 TP_ARGS(vcpu, reason));
75
76DEFINE_EVENT(kvm_exit, kvm_exit_cache,
77 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
78 TP_ARGS(vcpu, reason));
79
80DEFINE_EVENT(kvm_exit, kvm_exit,
81 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
82 TP_ARGS(vcpu, reason));
83
84TRACE_EVENT(kvm_exit_gspr,
85 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int inst_word),
86 TP_ARGS(vcpu, inst_word),
87 TP_STRUCT__entry(
88 __field(unsigned int, inst_word)
89 ),
90
91 TP_fast_assign(
92 __entry->inst_word = inst_word;
93 ),
94
95 TP_printk("Inst word: 0x%08x", __entry->inst_word)
96);
97
98#define KVM_TRACE_AUX_SAVE 0
99#define KVM_TRACE_AUX_RESTORE 1
100#define KVM_TRACE_AUX_ENABLE 2
101#define KVM_TRACE_AUX_DISABLE 3
102#define KVM_TRACE_AUX_DISCARD 4
103
104#define KVM_TRACE_AUX_FPU 1
105#define KVM_TRACE_AUX_LSX 2
106#define KVM_TRACE_AUX_LASX 3
107
108#define kvm_trace_symbol_aux_op \
109 { KVM_TRACE_AUX_SAVE, "save" }, \
110 { KVM_TRACE_AUX_RESTORE, "restore" }, \
111 { KVM_TRACE_AUX_ENABLE, "enable" }, \
112 { KVM_TRACE_AUX_DISABLE, "disable" }, \
113 { KVM_TRACE_AUX_DISCARD, "discard" }
114
115#define kvm_trace_symbol_aux_state \
116 { KVM_TRACE_AUX_FPU, "FPU" }, \
117 { KVM_TRACE_AUX_LSX, "LSX" }, \
118 { KVM_TRACE_AUX_LASX, "LASX" }
119
120TRACE_EVENT(kvm_aux,
121 TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op,
122 unsigned int state),
123 TP_ARGS(vcpu, op, state),
124 TP_STRUCT__entry(
125 __field(unsigned long, pc)
126 __field(u8, op)
127 __field(u8, state)
128 ),
129
130 TP_fast_assign(
131 __entry->pc = vcpu->arch.pc;
132 __entry->op = op;
133 __entry->state = state;
134 ),
135
136 TP_printk("%s %s PC: 0x%08lx",
137 __print_symbolic(__entry->op,
138 kvm_trace_symbol_aux_op),
139 __print_symbolic(__entry->state,
140 kvm_trace_symbol_aux_state),
141 __entry->pc)
142);
143
144TRACE_EVENT(kvm_vpid_change,
145 TP_PROTO(struct kvm_vcpu *vcpu, unsigned long vpid),
146 TP_ARGS(vcpu, vpid),
147 TP_STRUCT__entry(
148 __field(unsigned long, vpid)
149 ),
150
151 TP_fast_assign(
152 __entry->vpid = vpid;
153 ),
154
155 TP_printk("VPID: 0x%08lx", __entry->vpid)
156);
157
158#endif /* _TRACE_KVM_H */
159
160#undef TRACE_INCLUDE_PATH
161#define TRACE_INCLUDE_PATH ../../arch/loongarch/kvm
162#undef TRACE_INCLUDE_FILE
163#define TRACE_INCLUDE_FILE trace
164
165/* This part must be outside protection */
166#include <trace/define_trace.h>
167

source code of linux/arch/loongarch/kvm/trace.h