51 lines
1.7 KiB
Diff
51 lines
1.7 KiB
Diff
|
|
From a079801cd3ae6484cad6826f20bcf4ecc7e97ead Mon Sep 17 00:00:00 2001
|
||
|
|
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
|
||
|
|
Date: Wed, 5 May 2021 15:43:27 +0200
|
||
|
|
Subject: [PATCH] target/arm/kvm: Write CPU state back to KVM on reset
|
||
|
|
|
||
|
|
When a KVM vCPU is reset following a PSCI CPU_ON call, its power state
|
||
|
|
is not synchronized with KVM at the moment. Because the vCPU is not
|
||
|
|
marked dirty, we miss the call to kvm_arch_put_registers() that writes
|
||
|
|
to KVM's MP_STATE. Force mp_state synchronization.
|
||
|
|
|
||
|
|
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
|
||
|
|
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
|
||
|
|
---
|
||
|
|
target/arm/kvm.c | 9 ++++++++-
|
||
|
|
1 file changed, 8 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
|
||
|
|
index 70cf15b550..aca652621f 100644
|
||
|
|
--- a/target/arm/kvm.c
|
||
|
|
+++ b/target/arm/kvm.c
|
||
|
|
@@ -636,11 +636,12 @@ void kvm_arm_cpu_post_load(ARMCPU *cpu)
|
||
|
|
void kvm_arm_reset_vcpu(ARMCPU *cpu)
|
||
|
|
{
|
||
|
|
int ret;
|
||
|
|
+ CPUState *cs = CPU(cpu);
|
||
|
|
|
||
|
|
/* Re-init VCPU so that all registers are set to
|
||
|
|
* their respective reset values.
|
||
|
|
*/
|
||
|
|
- ret = kvm_arm_vcpu_init(CPU(cpu));
|
||
|
|
+ ret = kvm_arm_vcpu_init(cs);
|
||
|
|
if (ret < 0) {
|
||
|
|
fprintf(stderr, "kvm_arm_vcpu_init failed: %s\n", strerror(-ret));
|
||
|
|
abort();
|
||
|
|
@@ -657,6 +658,12 @@ void kvm_arm_reset_vcpu(ARMCPU *cpu)
|
||
|
|
* for the same reason we do so in kvm_arch_get_registers().
|
||
|
|
*/
|
||
|
|
write_list_to_cpustate(cpu);
|
||
|
|
+
|
||
|
|
+ /*
|
||
|
|
+ * Ensure we call kvm_arch_put_registers(). The vCPU isn't marked dirty if
|
||
|
|
+ * it was parked in KVM and is now booting from a PSCI CPU_ON call.
|
||
|
|
+ */
|
||
|
|
+ cs->vcpu_dirty = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
void kvm_arm_create_host_vcpu(ARMCPU *cpu)
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|