mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-14 23:13:30 +00:00
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
This commit is contained in:
parent
6ec1588e09
commit
75c9a1a047
|
@ -72,10 +72,6 @@ typedef struct ARMCPU {
|
||||||
uint64_t *cpreg_indexes;
|
uint64_t *cpreg_indexes;
|
||||||
/* Values of the registers (cpreg_indexes[i]'s value is cpreg_values[i]) */
|
/* Values of the registers (cpreg_indexes[i]'s value is cpreg_values[i]) */
|
||||||
uint64_t *cpreg_values;
|
uint64_t *cpreg_values;
|
||||||
/* When using KVM, keeps a copy of the initial state of the VCPU,
|
|
||||||
* so that on reset we can feed the reset values back into the kernel.
|
|
||||||
*/
|
|
||||||
uint64_t *cpreg_reset_values;
|
|
||||||
/* Length of the indexes, values, reset_values arrays */
|
/* Length of the indexes, values, reset_values arrays */
|
||||||
int32_t cpreg_array_len;
|
int32_t cpreg_array_len;
|
||||||
/* These are used only for migration: incoming data arrives in
|
/* These are used only for migration: incoming data arrives in
|
||||||
|
|
|
@ -270,13 +270,6 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
||||||
goto out;
|
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:
|
out:
|
||||||
g_free(rlp);
|
g_free(rlp);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -518,11 +511,9 @@ int kvm_arch_get_registers(CPUState *cs)
|
||||||
|
|
||||||
void kvm_arm_reset_vcpu(ARMCPU *cpu)
|
void kvm_arm_reset_vcpu(ARMCPU *cpu)
|
||||||
{
|
{
|
||||||
/* Feed the kernel back its initial register state */
|
/* Re-init VCPU so that all registers are set to
|
||||||
memmove(cpu->cpreg_values, cpu->cpreg_reset_values,
|
* their respective reset values.
|
||||||
cpu->cpreg_array_len * sizeof(cpu->cpreg_values[0]));
|
*/
|
||||||
|
kvm_arm_vcpu_init(CPU(cpu));
|
||||||
if (!write_list_to_kvmstate(cpu)) {
|
write_kvmstate_to_list(cpu);
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue