[PATCH v5 1/2] RISC-V: KVM: add tracepoint for guest page faults
From: Wang Yechao
Date: Mon Sep 14 2026 - 02:16:55 EST
Add the kvm_page_fault event tracepoint to count the number of KVM
guest page faults.
Signed-off-by: Wang Yechao <wang.yechao255@xxxxxxxxxx>
---
arch/riscv/kvm/trace.h | 22 ++++++++++++++++++++++
arch/riscv/kvm/vcpu_exit.c | 2 ++
2 files changed, 24 insertions(+)
diff --git a/arch/riscv/kvm/trace.h b/arch/riscv/kvm/trace.h
index 23a5fd1b686e..07fcf5b6059b 100644
--- a/arch/riscv/kvm/trace.h
+++ b/arch/riscv/kvm/trace.h
@@ -133,6 +133,28 @@ TRACE_EVENT(kvm_vcpu_irq,
__entry->vcpu_id, __entry->irq, __entry->level)
);
+TRACE_EVENT(kvm_page_fault,
+ TP_PROTO(struct kvm_vcpu *vcpu, u64 fault_address, u64 error_code),
+ TP_ARGS(vcpu, fault_address, error_code),
+
+ TP_STRUCT__entry(
+ __field(unsigned int, vcpu_id)
+ __field(u64, fault_address)
+ __field(u64, error_code)
+ ),
+
+ TP_fast_assign(
+ __entry->vcpu_id = vcpu->vcpu_id;
+ __entry->fault_address = fault_address;
+ __entry->error_code = error_code;
+ ),
+
+ TP_printk("vcpu %u address 0x%016llx error_code 0x%llx",
+ __entry->vcpu_id,
+ __entry->fault_address,
+ __entry->error_code)
+);
+
#endif /* _TRACE_KVM_H */
#undef TRACE_INCLUDE_PATH
diff --git a/arch/riscv/kvm/vcpu_exit.c b/arch/riscv/kvm/vcpu_exit.c
index 88e0c369b354..de0262d0fd95 100644
--- a/arch/riscv/kvm/vcpu_exit.c
+++ b/arch/riscv/kvm/vcpu_exit.c
@@ -29,6 +29,8 @@ static int gstage_page_fault(struct kvm_vcpu *vcpu, struct kvm_run *run,
memslot = gfn_to_memslot(vcpu->kvm, gfn);
hva = gfn_to_hva_memslot_prot(memslot, gfn, &writable);
+ trace_kvm_page_fault(vcpu, fault_addr, trap->scause);
+
if (kvm_is_error_hva(hva) ||
(trap->scause == EXC_STORE_GUEST_PAGE_FAULT && !writable)) {
switch (trap->scause) {
--
2.27.0