]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
LoongArch: KVM: Add tracepoints for CPUCFG and CSR emulation exits
authorYulong Han <wheatfox17@icloud.com>
Mon, 21 Jul 2025 01:26:35 +0000 (09:26 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Mon, 21 Jul 2025 01:26:35 +0000 (09:26 +0800)
This patch adds tracepoints to track KVM exits caused by CPUCFG and
CSR emulation. Note that IOCSR emulation tracing is already covered
by the generic trace_kvm_iocsr().

Reviewed-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Yulong Han <wheatfox17@icloud.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kvm/exit.c
arch/loongarch/kvm/trace.h

index a0ceb49a060f7636de827cea52c380c2fce955a2..2ce41f93b2a44462a71bf9cb1e3a836a41217c1f 100644 (file)
@@ -289,9 +289,11 @@ static int kvm_trap_handle_gspr(struct kvm_vcpu *vcpu)
        er = EMULATE_FAIL;
        switch (((inst.word >> 24) & 0xff)) {
        case 0x0: /* CPUCFG GSPR */
+               trace_kvm_exit_cpucfg(vcpu, KVM_TRACE_EXIT_CPUCFG);
                er = kvm_emu_cpucfg(vcpu, inst);
                break;
        case 0x4: /* CSR{RD,WR,XCHG} GSPR */
+               trace_kvm_exit_csr(vcpu, KVM_TRACE_EXIT_CSR);
                er = kvm_handle_csr(vcpu, inst);
                break;
        case 0x6: /* Cache, Idle and IOCSR GSPR */
index 1783397b1bc88e852b5b424549e00acc1cce0ff8..145514dab6d5bb38107992412d9a3fdf7bc767b3 100644 (file)
@@ -46,11 +46,15 @@ DEFINE_EVENT(kvm_transition, kvm_out,
 /* Further exit reasons */
 #define KVM_TRACE_EXIT_IDLE            64
 #define KVM_TRACE_EXIT_CACHE           65
+#define KVM_TRACE_EXIT_CPUCFG          66
+#define KVM_TRACE_EXIT_CSR             67
 
 /* Tracepoints for VM exits */
 #define kvm_trace_symbol_exit_types                    \
        { KVM_TRACE_EXIT_IDLE,          "IDLE" },       \
-       { KVM_TRACE_EXIT_CACHE,         "CACHE" }
+       { KVM_TRACE_EXIT_CACHE,         "CACHE" },      \
+       { KVM_TRACE_EXIT_CPUCFG,        "CPUCFG" },     \
+       { KVM_TRACE_EXIT_CSR,           "CSR" }
 
 DECLARE_EVENT_CLASS(kvm_exit,
            TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
@@ -82,6 +86,14 @@ DEFINE_EVENT(kvm_exit, kvm_exit_cache,
             TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
             TP_ARGS(vcpu, reason));
 
+DEFINE_EVENT(kvm_exit, kvm_exit_cpucfg,
+            TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
+            TP_ARGS(vcpu, reason));
+
+DEFINE_EVENT(kvm_exit, kvm_exit_csr,
+            TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
+            TP_ARGS(vcpu, reason));
+
 DEFINE_EVENT(kvm_exit, kvm_exit,
             TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
             TP_ARGS(vcpu, reason));