id = 1688 title = "target/riscv KVM_RISCV_SET_TIMER macro is not configured correctly" state = "closed" created_at = "2023-06-06T08:51:28.349Z" closed_at = "2023-07-10T22:58:39.120Z" labels = ["target: riscv", "workflow::Triaged"] url = "https://gitlab.com/qemu-project/qemu/-/issues/1688" host-os = "Linux" host-arch = "X86" qemu-version = "QEMU emulator version 7.2.50 (v7.2.0-333-g222059a0fc)" guest-os = "Linux" guest-arch = "RISCV" description = """When riscv kvm vm state changed, guest virtual time would stop/continue. But KVM_RISCV_SET_TIMER is wrong, qemu-kvm can only set 'time'.""" reproduce = """1.start host kernel 2.start qemu-kvm""" additional = """Below code has some probelm: ``` =================================================================== #define KVM_RISCV_SET_TIMER(cs, env, name, reg) \\ do { \\ int ret = kvm_set_one_reg(cs, RISCV_TIMER_REG(env, time), ®); \\ =================================================================== ``` I think it should be like this: ``` diff --git a/target/riscv/kvm.c b/target/riscv/kvm.c index 30f21453d6..0c567f668c 100644 --- a/target/riscv/kvm.c +++ b/target/riscv/kvm.c @@ -99,7 +99,7 @@ static uint64_t kvm_riscv_reg_id(CPURISCVState *env, uint64_t type, #define KVM_RISCV_SET_TIMER(cs, env, name, reg) \\ do { \\ - int ret = kvm_set_one_reg(cs, RISCV_TIMER_REG(env, time), ®); \\ + int ret = kvm_set_one_reg(cs, RISCV_TIMER_REG(env, name), ®); \\ if (ret) { \\ abort(); \\ } \\ ```"""