[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH RFC v4 4/9] target/loongarch: Implement kvm get/set registers
|
From: |
Philippe Mathieu-Daudé |
|
Subject: |
Re: [PATCH RFC v4 4/9] target/loongarch: Implement kvm get/set registers |
|
Date: |
Wed, 11 Oct 2023 04:56:16 +0200 |
|
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 |
Hi Li and Zhao,
On 9/10/23 11:01, xianglai li wrote:
From: Tianrui Zhao <zhaotianrui@loongson.cn>
Implement kvm_arch_get/set_registers interfaces, many regs
can be get/set in the function, such as core regs, csr regs,
fpu regs, mp state, etc.
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: "Philippe Mathieu-Daudé" <philmd@linaro.org>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Song Gao <gaosong@loongson.cn>
Cc: Xiaojuan Yang <yangxiaojuan@loongson.cn>
Cc: Tianrui Zhao <zhaotianrui@loongson.cn>
Signed-off-by: Tianrui Zhao <zhaotianrui@loongson.cn>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
meson.build | 1 +
target/loongarch/cpu.c | 3 +
target/loongarch/cpu.h | 2 +
target/loongarch/kvm.c | 406 +++++++++++++++++++++++++++++++++-
target/loongarch/trace-events | 13 ++
target/loongarch/trace.h | 1 +
6 files changed, 424 insertions(+), 2 deletions(-)
create mode 100644 target/loongarch/trace-events
create mode 100644 target/loongarch/trace.h
+static int kvm_larch_getq(CPUState *cs, uint64_t reg_id,
+ uint64_t *addr)
+{
+ struct kvm_one_reg csrreg = {
+ .id = reg_id,
+ .addr = (uintptr_t)addr
+ };
+
+ return kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &csrreg);
+}
This is kvm_get_one_reg().
+static int kvm_larch_putq(CPUState *cs, uint64_t reg_id,
+ uint64_t *addr)
+{
+ struct kvm_one_reg csrreg = {
+ .id = reg_id,
+ .addr = (uintptr_t)addr
+ };
+
+ return kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &csrreg);
+}
This is kvm_set_one_reg().
+
+#define KVM_GET_ONE_UREG64(cs, ret, regidx, addr) \
+ ({ \
+ err = kvm_larch_getq(cs, KVM_IOC_CSRID(regidx), addr); \
+ if (err < 0) { \
+ ret = err; \
+ trace_kvm_failed_get_csr(regidx, strerror(errno)); \
+ } \
+ })
+
+#define KVM_PUT_ONE_UREG64(cs, ret, regidx, addr) \
+ ({ \
+ err = kvm_larch_putq(cs, KVM_IOC_CSRID(regidx), addr); \
+ if (err < 0) { \
+ ret = err; \
+ trace_kvm_failed_put_csr(regidx, strerror(errno)); \
+ } \
+ })
- [PATCH RFC v4 0/9] Add loongarch kvm accel support, xianglai li, 2023/10/09
- [PATCH RFC v4 3/9] target/loongarch: Supplement vcpu env initial when vcpu reset, xianglai li, 2023/10/09
- [PATCH RFC v4 6/9] target/loongarch: Implement kvm_arch_init_vcpu, xianglai li, 2023/10/09
- [PATCH RFC v4 8/9] target/loongarch: Implement set vcpu intr for kvm, xianglai li, 2023/10/09
- [PATCH RFC v4 1/9] linux-headers: Add KVM headers for loongarch, xianglai li, 2023/10/09
- [PATCH RFC v4 5/9] target/loongarch: Implement kvm_arch_init function, xianglai li, 2023/10/09
- [PATCH RFC v4 4/9] target/loongarch: Implement kvm get/set registers, xianglai li, 2023/10/09
- Re: [PATCH RFC v4 4/9] target/loongarch: Implement kvm get/set registers,
Philippe Mathieu-Daudé <=
- [PATCH RFC v4 7/9] target/loongarch: Implement kvm_arch_handle_exit, xianglai li, 2023/10/09
- [PATCH RFC v4 2/9] target/loongarch: Define some kvm_arch interfaces, xianglai li, 2023/10/09
- [PATCH RFC v4 9/9] target/loongarch: Add loongarch kvm into meson build, xianglai li, 2023/10/09
- Re: [PATCH RFC v4 0/9] Add loongarch kvm accel support, Philippe Mathieu-Daudé, 2023/10/11