]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: riscv: selftests: Do not start the counter in the overflow handler
authorAtish Patra <atishp@rivosinc.com>
Mon, 3 Mar 2025 22:53:07 +0000 (14:53 -0800)
committerAnup Patel <anup@brainfault.org>
Thu, 6 Mar 2025 04:27:07 +0000 (09:57 +0530)
There is no need to start the counter in the overflow handler as we
intend to trigger precise number of LCOFI interrupts through these
tests. The overflow irq handler has already stopped the counter. As
a result, the stop call from the test function may return already
stopped error which is fine as well.

Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Signed-off-by: Atish Patra <atishp@rivosinc.com>
Link: https://lore.kernel.org/r/20250303-kvm_pmu_improve-v2-2-41d177e45929@rivosinc.com
Signed-off-by: Anup Patel <anup@brainfault.org>
tools/testing/selftests/kvm/riscv/sbi_pmu_test.c

index f45c0ecc902d688cbd5bf6317380cbea4c95e13a..284bc80193bd3fa34e8e480678ba924b597891fe 100644 (file)
@@ -118,8 +118,8 @@ static void stop_counter(unsigned long counter, unsigned long stop_flags)
 
        ret = sbi_ecall(SBI_EXT_PMU, SBI_EXT_PMU_COUNTER_STOP, counter, 1, stop_flags,
                        0, 0, 0);
-       __GUEST_ASSERT(ret.error == 0, "Unable to stop counter %ld error %ld\n",
-                              counter, ret.error);
+       __GUEST_ASSERT(ret.error == 0 || ret.error == SBI_ERR_ALREADY_STOPPED,
+                      "Unable to stop counter %ld error %ld\n", counter, ret.error);
 }
 
 static void guest_illegal_exception_handler(struct ex_regs *regs)
@@ -137,7 +137,6 @@ static void guest_irq_handler(struct ex_regs *regs)
        unsigned int irq_num = regs->cause & ~CAUSE_IRQ_FLAG;
        struct riscv_pmu_snapshot_data *snapshot_data = snapshot_gva;
        unsigned long overflown_mask;
-       unsigned long counter_val = 0;
 
        /* Validate that we are in the correct irq handler */
        GUEST_ASSERT_EQ(irq_num, IRQ_PMU_OVF);
@@ -151,10 +150,6 @@ static void guest_irq_handler(struct ex_regs *regs)
        GUEST_ASSERT(overflown_mask & 0x01);
 
        WRITE_ONCE(vcpu_shared_irq_count, vcpu_shared_irq_count+1);
-
-       counter_val = READ_ONCE(snapshot_data->ctr_values[0]);
-       /* Now start the counter to mimick the real driver behavior */
-       start_counter(counter_in_use, SBI_PMU_START_FLAG_SET_INIT_VALUE, counter_val);
 }
 
 static unsigned long get_counter_index(unsigned long cbase, unsigned long cmask,