1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
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(); \\
} \\
```"""
|