1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2020-2023 Loongson Technology Corporation Limited
6 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
9 #include <linux/tracepoint.h>
10 #include <asm/kvm_csr.h>
13 #define TRACE_SYSTEM kvm
16 * Tracepoints for VM enters
18 DECLARE_EVENT_CLASS(kvm_transition
,
19 TP_PROTO(struct kvm_vcpu
*vcpu
),
22 __field(unsigned long, pc
)
26 __entry
->pc
= vcpu
->arch
.pc
;
29 TP_printk("PC: 0x%08lx", __entry
->pc
)
32 DEFINE_EVENT(kvm_transition
, kvm_enter
,
33 TP_PROTO(struct kvm_vcpu
*vcpu
),
36 DEFINE_EVENT(kvm_transition
, kvm_reenter
,
37 TP_PROTO(struct kvm_vcpu
*vcpu
),
40 DEFINE_EVENT(kvm_transition
, kvm_out
,
41 TP_PROTO(struct kvm_vcpu
*vcpu
),
44 /* Further exit reasons */
45 #define KVM_TRACE_EXIT_IDLE 64
46 #define KVM_TRACE_EXIT_CACHE 65
48 /* Tracepoints for VM exits */
49 #define kvm_trace_symbol_exit_types \
50 { KVM_TRACE_EXIT_IDLE, "IDLE" }, \
51 { KVM_TRACE_EXIT_CACHE, "CACHE" }
53 DECLARE_EVENT_CLASS(kvm_exit
,
54 TP_PROTO(struct kvm_vcpu
*vcpu
, unsigned int reason
),
55 TP_ARGS(vcpu
, reason
),
57 __field(unsigned long, pc
)
58 __field(unsigned int, reason
)
62 __entry
->pc
= vcpu
->arch
.pc
;
63 __entry
->reason
= reason
;
66 TP_printk("[%s]PC: 0x%08lx",
67 __print_symbolic(__entry
->reason
,
68 kvm_trace_symbol_exit_types
),
72 DEFINE_EVENT(kvm_exit
, kvm_exit_idle
,
73 TP_PROTO(struct kvm_vcpu
*vcpu
, unsigned int reason
),
74 TP_ARGS(vcpu
, reason
));
76 DEFINE_EVENT(kvm_exit
, kvm_exit_cache
,
77 TP_PROTO(struct kvm_vcpu
*vcpu
, unsigned int reason
),
78 TP_ARGS(vcpu
, reason
));
80 DEFINE_EVENT(kvm_exit
, kvm_exit
,
81 TP_PROTO(struct kvm_vcpu
*vcpu
, unsigned int reason
),
82 TP_ARGS(vcpu
, reason
));
84 TRACE_EVENT(kvm_exit_gspr
,
85 TP_PROTO(struct kvm_vcpu
*vcpu
, unsigned int inst_word
),
86 TP_ARGS(vcpu
, inst_word
),
88 __field(unsigned int, inst_word
)
92 __entry
->inst_word
= inst_word
;
95 TP_printk("Inst word: 0x%08x", __entry
->inst_word
)
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
104 #define KVM_TRACE_AUX_FPU 1
106 #define kvm_trace_symbol_aux_op \
107 { KVM_TRACE_AUX_SAVE, "save" }, \
108 { KVM_TRACE_AUX_RESTORE, "restore" }, \
109 { KVM_TRACE_AUX_ENABLE, "enable" }, \
110 { KVM_TRACE_AUX_DISABLE, "disable" }, \
111 { KVM_TRACE_AUX_DISCARD, "discard" }
113 #define kvm_trace_symbol_aux_state \
114 { KVM_TRACE_AUX_FPU, "FPU" }
117 TP_PROTO(struct kvm_vcpu
*vcpu
, unsigned int op
,
119 TP_ARGS(vcpu
, op
, state
),
121 __field(unsigned long, pc
)
127 __entry
->pc
= vcpu
->arch
.pc
;
129 __entry
->state
= state
;
132 TP_printk("%s %s PC: 0x%08lx",
133 __print_symbolic(__entry
->op
,
134 kvm_trace_symbol_aux_op
),
135 __print_symbolic(__entry
->state
,
136 kvm_trace_symbol_aux_state
),
140 TRACE_EVENT(kvm_vpid_change
,
141 TP_PROTO(struct kvm_vcpu
*vcpu
, unsigned long vpid
),
144 __field(unsigned long, vpid
)
148 __entry
->vpid
= vpid
;
151 TP_printk("VPID: 0x%08lx", __entry
->vpid
)
154 #endif /* _TRACE_KVM_H */
156 #undef TRACE_INCLUDE_PATH
157 #define TRACE_INCLUDE_PATH ../../arch/loongarch/kvm
158 #undef TRACE_INCLUDE_FILE
159 #define TRACE_INCLUDE_FILE trace
161 /* This part must be outside protection */
162 #include <trace/define_trace.h>