69 lines
2.3 KiB
Diff
69 lines
2.3 KiB
Diff
|
|
From ad00cc7da8ab03d6d612a3bd7ec0c4b7af594894 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Bibo Mao <maobibo@loongson.cn>
|
||
|
|
Date: Thu, 22 Aug 2024 10:28:27 +0800
|
||
|
|
Subject: [PATCH 51/78] target/loongarch/kvm: Add vCPU reset function
|
||
|
|
|
||
|
|
KVM provides interface KVM_REG_LOONGARCH_VCPU_RESET to reset vCPU,
|
||
|
|
it can be used to clear internal state about kvm kernel. vCPU reset
|
||
|
|
function is added here for kvm mode.
|
||
|
|
|
||
|
|
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
|
||
|
|
Reviewed-by: Song Gao <gaosong@loongson.cn>
|
||
|
|
Message-Id: <20240822022827.2273534-1-maobibo@loongson.cn>
|
||
|
|
Signed-off-by: Song Gao <gaosong@loongson.cn>
|
||
|
|
Signed-off-by: Xianglai Li <lixianglai@loongson.cn>
|
||
|
|
---
|
||
|
|
target/loongarch/cpu.c | 2 +-
|
||
|
|
target/loongarch/kvm/kvm.c | 5 ++++-
|
||
|
|
target/loongarch/kvm/kvm_loongarch.h | 2 +-
|
||
|
|
3 files changed, 6 insertions(+), 3 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
|
||
|
|
index 2038984d02..63d1f65608 100644
|
||
|
|
--- a/target/loongarch/cpu.c
|
||
|
|
+++ b/target/loongarch/cpu.c
|
||
|
|
@@ -608,7 +608,7 @@ static void loongarch_cpu_reset_hold(Object *obj)
|
||
|
|
memset(env->tlb, 0, sizeof(env->tlb));
|
||
|
|
#endif
|
||
|
|
if (kvm_enabled()) {
|
||
|
|
- kvm_arch_reset_vcpu(env);
|
||
|
|
+ kvm_arch_reset_vcpu(cs);
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
|
||
|
|
index 407d454919..90c8379c46 100644
|
||
|
|
--- a/target/loongarch/kvm/kvm.c
|
||
|
|
+++ b/target/loongarch/kvm/kvm.c
|
||
|
|
@@ -485,9 +485,12 @@ static int kvm_loongarch_put_regs_fp(CPUState *cs)
|
||
|
|
return ret;
|
||
|
|
}
|
||
|
|
|
||
|
|
-void kvm_arch_reset_vcpu(CPULoongArchState *env)
|
||
|
|
+void kvm_arch_reset_vcpu(CPUState *cs)
|
||
|
|
{
|
||
|
|
+ CPULoongArchState *env = cpu_env(cs);
|
||
|
|
+
|
||
|
|
env->mp_state = KVM_MP_STATE_RUNNABLE;
|
||
|
|
+ kvm_set_one_reg(cs, KVM_REG_LOONGARCH_VCPU_RESET, 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
static int kvm_loongarch_get_mpstate(CPUState *cs)
|
||
|
|
diff --git a/target/loongarch/kvm/kvm_loongarch.h b/target/loongarch/kvm/kvm_loongarch.h
|
||
|
|
index 551878a725..8482f9308d 100644
|
||
|
|
--- a/target/loongarch/kvm/kvm_loongarch.h
|
||
|
|
+++ b/target/loongarch/kvm/kvm_loongarch.h
|
||
|
|
@@ -11,8 +11,8 @@
|
||
|
|
#define QEMU_KVM_LOONGARCH_H
|
||
|
|
|
||
|
|
int kvm_loongarch_set_interrupt(LoongArchCPU *cpu, int irq, int level);
|
||
|
|
-void kvm_arch_reset_vcpu(CPULoongArchState *env);
|
||
|
|
int kvm_loongarch_put_pvtime(LoongArchCPU *cpu);
|
||
|
|
int kvm_loongarch_get_pvtime(LoongArchCPU *cpu);
|
||
|
|
+void kvm_arch_reset_vcpu(CPUState *cs);
|
||
|
|
|
||
|
|
#endif
|
||
|
|
--
|
||
|
|
2.39.1
|
||
|
|
|