[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 7/8] s390x/migration: migrate CPU state
From: |
Cornelia Huck |
Subject: |
[Qemu-devel] [PULL 7/8] s390x/migration: migrate CPU state |
Date: |
Thu, 9 Oct 2014 15:36:00 +0200 |
From: Thomas Huth <address@hidden>
This patch provides the cpu save information for dumps and later life
migration and enables migration of the CPU state. The code is based on
earlier work from Christian Borntraeger and Jason Herne.
Signed-off-by: Thomas Huth <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
[provide cpu_post_load()]
Signed-off-by: Jens Freimann <address@hidden>
CC: Andreas Faerber <address@hidden>
CC: Christian Borntraeger <address@hidden>
CC: Jason J. Herne <address@hidden>
Tested-by: Christian Borntraeger <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
target-s390x/cpu.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 57 insertions(+), 2 deletions(-)
diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c
index ec7df90..c9c237f 100644
--- a/target-s390x/cpu.c
+++ b/target-s390x/cpu.c
@@ -292,9 +292,64 @@ unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU
*cpu)
}
#endif
+static int cpu_post_load(void *opaque, int version_id)
+{
+ S390CPU *cpu = opaque;
+
+ /* the cpu state is fine for QEMU - we just need to push it to kvm */
+ if (kvm_enabled()) {
+ kvm_s390_set_cpu_state(cpu, cpu->env.cpu_state);
+ }
+
+ return 0;
+}
+
static const VMStateDescription vmstate_s390_cpu = {
.name = "cpu",
- .unmigratable = 1,
+ .post_load = cpu_post_load,
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .minimum_version_id_old = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT64(env.fregs[0].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[1].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[2].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[3].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[4].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[5].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[6].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[7].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[8].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[9].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[10].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[11].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[12].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[13].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[14].ll, S390CPU),
+ VMSTATE_UINT64(env.fregs[15].ll, S390CPU),
+ VMSTATE_UINT64_ARRAY(env.regs, S390CPU, 16),
+ VMSTATE_UINT64(env.psw.mask, S390CPU),
+ VMSTATE_UINT64(env.psw.addr, S390CPU),
+ VMSTATE_UINT64(env.psa, S390CPU),
+ VMSTATE_UINT32(env.fpc, S390CPU),
+ VMSTATE_UINT32(env.todpr, S390CPU),
+ VMSTATE_UINT64(env.pfault_token, S390CPU),
+ VMSTATE_UINT64(env.pfault_compare, S390CPU),
+ VMSTATE_UINT64(env.pfault_select, S390CPU),
+ VMSTATE_UINT64(env.cputm, S390CPU),
+ VMSTATE_UINT64(env.ckc, S390CPU),
+ VMSTATE_UINT64(env.gbea, S390CPU),
+ VMSTATE_UINT64(env.pp, S390CPU),
+ VMSTATE_UINT32_ARRAY(env.aregs, S390CPU, 16),
+ VMSTATE_UINT64_ARRAY(env.cregs, S390CPU, 16),
+ VMSTATE_UINT8(env.cpu_state, S390CPU),
+ VMSTATE_END_OF_LIST()
+ },
+ .subsections = (VMStateSubsection[]) {
+ {
+ /* empty */
+ }
+ }
};
static void s390_cpu_class_init(ObjectClass *oc, void *data)
@@ -323,11 +378,11 @@ static void s390_cpu_class_init(ObjectClass *oc, void
*data)
cc->handle_mmu_fault = s390_cpu_handle_mmu_fault;
#else
cc->get_phys_page_debug = s390_cpu_get_phys_page_debug;
+ cc->vmsd = &vmstate_s390_cpu;
cc->write_elf64_note = s390_cpu_write_elf64_note;
cc->write_elf64_qemunote = s390_cpu_write_elf64_qemunote;
cc->cpu_exec_interrupt = s390_cpu_exec_interrupt;
#endif
- dc->vmsd = &vmstate_s390_cpu;
cc->gdb_num_core_regs = S390_NUM_CORE_REGS;
cc->gdb_core_xml_file = "s390x-core64.xml";
}
--
1.7.9.5
- [Qemu-devel] [PULL 0/8] s390x patches for 2.2, Cornelia Huck, 2014/10/09
- [Qemu-devel] [PULL 2/8] s390x/kvm: introduce proper states for s390 cpus, Cornelia Huck, 2014/10/09
- [Qemu-devel] [PULL 3/8] s390x/kvm: proper use of the cpu states OPERATING and STOPPED, Cornelia Huck, 2014/10/09
- [Qemu-devel] [PULL 4/8] s390x/kvm: propagate s390 cpu state to kvm, Cornelia Huck, 2014/10/09
- [Qemu-devel] [PULL 1/8] linux-headers: update to 3.17-rc7, Cornelia Huck, 2014/10/09
- [Qemu-devel] [PULL 5/8] s390x/kvm: reuse kvm_s390_reset_vcpu() to get rid of ifdefs, Cornelia Huck, 2014/10/09
- [Qemu-devel] [PULL 6/8] s390x/kvm: synchronize the cpu state after SIGP (INITIAL) CPU RESET, Cornelia Huck, 2014/10/09
- [Qemu-devel] [PULL 7/8] s390x/migration: migrate CPU state,
Cornelia Huck <=
- [Qemu-devel] [PULL 8/8] s390x/virtio-ccw: fix vhost-scsi intialization, Cornelia Huck, 2014/10/09
- Re: [Qemu-devel] [PULL 0/8] s390x patches for 2.2, Peter Maydell, 2014/10/09