Skip to content

Commit af79caa

Browse files
atishp04avpatel
authored andcommitted
RISC-V: KVM: Add new exit statstics for redirected traps
Currently, kvm doesn't delegate the few traps such as misaligned load/store, illegal instruction and load/store access faults because it is not expected to occur in the guest very frequently. Thus, kvm gets a chance to act upon it or collect statistics about it before redirecting the traps to the guest. Collect both guest and host visible statistics during the traps. Enable them so that both guest and host can collect the stats about them if required. Reviewed-by: Anup Patel <anup@brainfault.org> Signed-off-by: Atish Patra <atishp@rivosinc.com> Link: https://lore.kernel.org/r/20241224-kvm_guest_stat-v2-3-08a77ac36b02@rivosinc.com Signed-off-by: Anup Patel <anup@brainfault.org>
1 parent 2f15b5e commit af79caa

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

arch/riscv/include/asm/kvm_host.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ struct kvm_vcpu_stat {
8787
u64 csr_exit_kernel;
8888
u64 signal_exits;
8989
u64 exits;
90+
u64 instr_illegal_exits;
91+
u64 load_misaligned_exits;
92+
u64 store_misaligned_exits;
93+
u64 load_access_exits;
94+
u64 store_access_exits;
9095
};
9196

9297
struct kvm_arch_memory_slot {

arch/riscv/kvm/vcpu.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
3434
STATS_DESC_COUNTER(VCPU, csr_exit_user),
3535
STATS_DESC_COUNTER(VCPU, csr_exit_kernel),
3636
STATS_DESC_COUNTER(VCPU, signal_exits),
37-
STATS_DESC_COUNTER(VCPU, exits)
37+
STATS_DESC_COUNTER(VCPU, exits),
38+
STATS_DESC_COUNTER(VCPU, instr_illegal_exits),
39+
STATS_DESC_COUNTER(VCPU, load_misaligned_exits),
40+
STATS_DESC_COUNTER(VCPU, store_misaligned_exits),
41+
STATS_DESC_COUNTER(VCPU, load_access_exits),
42+
STATS_DESC_COUNTER(VCPU, store_access_exits),
3843
};
3944

4045
const struct kvm_stats_header kvm_vcpu_stats_header = {

arch/riscv/kvm/vcpu_exit.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,22 +195,27 @@ int kvm_riscv_vcpu_exit(struct kvm_vcpu *vcpu, struct kvm_run *run,
195195
switch (trap->scause) {
196196
case EXC_INST_ILLEGAL:
197197
kvm_riscv_vcpu_pmu_incr_fw(vcpu, SBI_PMU_FW_ILLEGAL_INSN);
198+
vcpu->stat.instr_illegal_exits++;
198199
ret = vcpu_redirect(vcpu, trap);
199200
break;
200201
case EXC_LOAD_MISALIGNED:
201202
kvm_riscv_vcpu_pmu_incr_fw(vcpu, SBI_PMU_FW_MISALIGNED_LOAD);
203+
vcpu->stat.load_misaligned_exits++;
202204
ret = vcpu_redirect(vcpu, trap);
203205
break;
204206
case EXC_STORE_MISALIGNED:
205207
kvm_riscv_vcpu_pmu_incr_fw(vcpu, SBI_PMU_FW_MISALIGNED_STORE);
208+
vcpu->stat.store_misaligned_exits++;
206209
ret = vcpu_redirect(vcpu, trap);
207210
break;
208211
case EXC_LOAD_ACCESS:
209212
kvm_riscv_vcpu_pmu_incr_fw(vcpu, SBI_PMU_FW_ACCESS_LOAD);
213+
vcpu->stat.load_access_exits++;
210214
ret = vcpu_redirect(vcpu, trap);
211215
break;
212216
case EXC_STORE_ACCESS:
213217
kvm_riscv_vcpu_pmu_incr_fw(vcpu, SBI_PMU_FW_ACCESS_STORE);
218+
vcpu->stat.store_access_exits++;
214219
ret = vcpu_redirect(vcpu, trap);
215220
break;
216221
case EXC_INST_ACCESS:

0 commit comments

Comments
 (0)