[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 06/14] target/loongarch: Implement kvm_arch_init_vcpu
From: |
Song Gao |
Subject: |
[PULL 06/14] target/loongarch: Implement kvm_arch_init_vcpu |
Date: |
Thu, 11 Jan 2024 19:16:01 +0800 |
From: Tianrui Zhao <zhaotianrui@loongson.cn>
Implement kvm_arch_init_vcpu interface for loongarch,
in this function, we register VM change state handler.
And when VM state changes to running, the counter value
should be put into kvm to keep consistent with kvm,
and when state change to stop, counter value should be
refreshed from kvm.
Signed-off-by: Tianrui Zhao <zhaotianrui@loongson.cn>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
Reviewed-by: Song Gao <gaosong@loongson.cn>
Message-Id: <20240105075804.1228596-7-zhaotianrui@loongson.cn>
Signed-off-by: Song Gao <gaosong@loongson.cn>
---
target/loongarch/cpu.h | 2 ++
target/loongarch/kvm/kvm.c | 23 +++++++++++++++++++++++
target/loongarch/trace-events | 2 ++
3 files changed, 27 insertions(+)
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
index a61c0405a2..415c69e1df 100644
--- a/target/loongarch/cpu.h
+++ b/target/loongarch/cpu.h
@@ -381,6 +381,8 @@ struct ArchCPU {
/* 'compatible' string for this CPU for Linux device trees */
const char *dtb_compatible;
+ /* used by KVM_REG_LOONGARCH_COUNTER ioctl to access guest time counters */
+ uint64_t kvm_state_counter;
};
/**
diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
index 29944b9ef8..85e7aeb083 100644
--- a/target/loongarch/kvm/kvm.c
+++ b/target/loongarch/kvm/kvm.c
@@ -617,8 +617,31 @@ int kvm_arch_put_registers(CPUState *cs, int level)
return ret;
}
+static void kvm_loongarch_vm_stage_change(void *opaque, bool running,
+ RunState state)
+{
+ int ret;
+ CPUState *cs = opaque;
+ LoongArchCPU *cpu = LOONGARCH_CPU(cs);
+
+ if (running) {
+ ret = kvm_set_one_reg(cs, KVM_REG_LOONGARCH_COUNTER,
+ &cpu->kvm_state_counter);
+ if (ret < 0) {
+ trace_kvm_failed_put_counter(strerror(errno));
+ }
+ } else {
+ ret = kvm_get_one_reg(cs, KVM_REG_LOONGARCH_COUNTER,
+ &cpu->kvm_state_counter);
+ if (ret < 0) {
+ trace_kvm_failed_get_counter(strerror(errno));
+ }
+ }
+}
+
int kvm_arch_init_vcpu(CPUState *cs)
{
+ qemu_add_vm_change_state_handler(kvm_loongarch_vm_stage_change, cs);
return 0;
}
diff --git a/target/loongarch/trace-events b/target/loongarch/trace-events
index 6827ab566a..937c3c7c0c 100644
--- a/target/loongarch/trace-events
+++ b/target/loongarch/trace-events
@@ -7,5 +7,7 @@ kvm_failed_get_fpu(const char *msg) "Failed to get fpu from
KVM: %s"
kvm_failed_put_fpu(const char *msg) "Failed to put fpu into KVM: %s"
kvm_failed_get_mpstate(const char *msg) "Failed to get mp_state from KVM: %s"
kvm_failed_put_mpstate(const char *msg) "Failed to put mp_state into KVM: %s"
+kvm_failed_get_counter(const char *msg) "Failed to get counter from KVM: %s"
+kvm_failed_put_counter(const char *msg) "Failed to put counter into KVM: %s"
kvm_failed_get_cpucfg(const char *msg) "Failed to get cpucfg from KVM: %s"
kvm_failed_put_cpucfg(const char *msg) "Failed to put cpucfg into KVM: %s"
--
2.25.1
- [PULL 03/14] target/loongarch: Supplement vcpu env initial when vcpu reset, (continued)
- [PULL 03/14] target/loongarch: Supplement vcpu env initial when vcpu reset, Song Gao, 2024/01/11
- [PULL 05/14] target/loongarch: Implement kvm_arch_init function, Song Gao, 2024/01/11
- [PULL 08/14] target/loongarch: Restrict TCG-specific code, Song Gao, 2024/01/11
- [PULL 12/14] hw/loongarch/virt: Set iocsr address space per-board rather than percpu, Song Gao, 2024/01/11
- [PULL 01/14] linux-headers: Synchronize linux headers from linux v6.7.0-rc8, Song Gao, 2024/01/11
- [PULL 09/14] target/loongarch: Implement set vcpu intr for kvm, Song Gao, 2024/01/11
- [PULL 04/14] target/loongarch: Implement kvm get/set registers, Song Gao, 2024/01/11
- [PULL 02/14] target/loongarch: Define some kvm_arch interfaces, Song Gao, 2024/01/11
- [PULL 07/14] target/loongarch: Implement kvm_arch_handle_exit, Song Gao, 2024/01/11
- [PULL 11/14] hw/intc/loongarch_ipi: Use MemTxAttrs interface for ipi ops, Song Gao, 2024/01/11
- [PULL 06/14] target/loongarch: Implement kvm_arch_init_vcpu,
Song Gao <=
- [PULL 10/14] target/loongarch: Add loongarch kvm into meson build, Song Gao, 2024/01/11
- [PULL 13/14] hw/intc/loongarch_extioi: Add dynamic cpu number support, Song Gao, 2024/01/11
- [PULL 14/14] hw/intc/loongarch_extioi: Add vmstate post_load support, Song Gao, 2024/01/11
- Re: [PULL 00/14] loongarch-to-apply queue, Peter Maydell, 2024/01/12