[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 32/33] target-arm: Support save/load for 64 bit CPUs
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 32/33] target-arm: Support save/load for 64 bit CPUs |
Date: |
Thu, 11 Dec 2014 12:19:54 +0000 |
For migration to work on 64 bit CPUs, we need to include both
the 64-bit integer register file and the PSTATE. Everything
else is either stored in the same place as existing 32-bit CPU
state or handled by the generic sysreg mechanism.
Signed-off-by: Peter Maydell <address@hidden>
Message-id: address@hidden
---
target-arm/machine.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/target-arm/machine.c b/target-arm/machine.c
index 6437690..c29e7a2 100644
--- a/target-arm/machine.c
+++ b/target-arm/machine.c
@@ -127,6 +127,13 @@ static int get_cpsr(QEMUFile *f, void *opaque, size_t size)
CPUARMState *env = &cpu->env;
uint32_t val = qemu_get_be32(f);
+ env->aarch64 = ((val & PSTATE_nRW) == 0);
+
+ if (is_a64(env)) {
+ pstate_write(env, val);
+ return 0;
+ }
+
/* Avoid mode switch when restoring CPSR */
env->uncached_cpsr = val & CPSR_M;
cpsr_write(env, val, 0xffffffff);
@@ -137,8 +144,15 @@ static void put_cpsr(QEMUFile *f, void *opaque, size_t
size)
{
ARMCPU *cpu = opaque;
CPUARMState *env = &cpu->env;
+ uint32_t val;
+
+ if (is_a64(env)) {
+ val = pstate_read(env);
+ } else {
+ val = cpsr_read(env);
+ }
- qemu_put_be32(f, cpsr_read(env));
+ qemu_put_be32(f, val);
}
static const VMStateInfo vmstate_cpsr = {
@@ -222,12 +236,14 @@ static int cpu_post_load(void *opaque, int version_id)
const VMStateDescription vmstate_arm_cpu = {
.name = "cpu",
- .version_id = 21,
- .minimum_version_id = 21,
+ .version_id = 22,
+ .minimum_version_id = 22,
.pre_save = cpu_pre_save,
.post_load = cpu_post_load,
.fields = (VMStateField[]) {
VMSTATE_UINT32_ARRAY(env.regs, ARMCPU, 16),
+ VMSTATE_UINT64_ARRAY(env.xregs, ARMCPU, 32),
+ VMSTATE_UINT64(env.pc, ARMCPU),
{
.name = "cpsr",
.version_id = 0,
--
1.9.1
- [Qemu-devel] [PULL 00/33] target-arm queue, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 33/33] target-arm: Check error conditions on kvm_arm_reset_vcpu, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 32/33] target-arm: Support save/load for 64 bit CPUs,
Peter Maydell <=
- [Qemu-devel] [PULL 30/33] arm_gic_kvm: Tell kernel about number of IRQs, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 27/33] target-arm: make MAIR0/1 banked, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 28/33] hw/arm/realview.c: Fix memory leak in realview_init(), Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 31/33] target-arm/kvm: make reg sync code common between kvm32/64, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 24/33] target-arm: make PAR banked, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 23/33] target-arm: make IFAR/DFAR banked, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 21/33] target-arm: make IFSR banked, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 26/33] target-arm: make c13 cp regs banked (FCSEIDR, ...), Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 29/33] hw/arm/boot: fix uninitialized scalar variable warning reported by coverity, Peter Maydell, 2014/12/11
- [Qemu-devel] [PULL 17/33] target-arm: make CSSELR banked, Peter Maydell, 2014/12/11