aboutsummaryrefslogtreecommitdiff
path: root/target-arm/kvm32.c
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2014-06-26 18:16:13 +0100
committerPeter Maydell <peter.maydell@linaro.org>2014-07-08 13:05:11 +0100
commit75c9a1a0473cc5ca9756d11b236c715c7bc0ba67 (patch)
treef8d1985530290f3dff6f03f5ff50db9bd41276bd /target-arm/kvm32.c
parent6ec1588e09770ac7e9c60194faff6101111fc7f0 (diff)
target-arm: Implement vCPU reset via KVM_ARM_VCPU_INIT for 32-bit CPUs
Implement kvm_arm_vcpu_init() as a simple call to arm_arm_vcpu_init() (which uses the KVM_ARM_VCPU_INIT vcpu ioctl to tell the kernel to re-initialize the vCPU), rather than via the complicated code which saves a copy of the register state on first init and then writes it back to the kernel. This is much simpler and brings the 32-bit KVM code into line with the 64-bit code. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1403802973-20841-1-git-send-email-peter.maydell@linaro.org
Diffstat (limited to 'target-arm/kvm32.c')
-rw-r--r--target-arm/kvm32.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/target-arm/kvm32.c b/target-arm/kvm32.c
index 068af7db57..5ec4eb1f32 100644
--- a/target-arm/kvm32.c
+++ b/target-arm/kvm32.c
@@ -270,13 +270,6 @@ int kvm_arch_init_vcpu(CPUState *cs)
goto out;
}
- /* Save a copy of the initial register values so that we can
- * feed it back to the kernel on VCPU reset.
- */
- cpu->cpreg_reset_values = g_memdup(cpu->cpreg_values,
- cpu->cpreg_array_len *
- sizeof(cpu->cpreg_values[0]));
-
out:
g_free(rlp);
return ret;
@@ -518,11 +511,9 @@ int kvm_arch_get_registers(CPUState *cs)
void kvm_arm_reset_vcpu(ARMCPU *cpu)
{
- /* Feed the kernel back its initial register state */
- memmove(cpu->cpreg_values, cpu->cpreg_reset_values,
- cpu->cpreg_array_len * sizeof(cpu->cpreg_values[0]));
-
- if (!write_list_to_kvmstate(cpu)) {
- abort();
- }
+ /* Re-init VCPU so that all registers are set to
+ * their respective reset values.
+ */
+ kvm_arm_vcpu_init(CPU(cpu));
+ write_kvmstate_to_list(cpu);
}