diff options
author | David Hildenbrand <dahi@linux.vnet.ibm.com> | 2015-03-30 13:22:47 +0200 |
---|---|---|
committer | Cornelia Huck <cornelia.huck@de.ibm.com> | 2015-05-08 10:36:19 +0200 |
commit | 46c804def4bda2491c546e8e33b86fe4981e4b68 (patch) | |
tree | 1f9edc4157f65f3959608088614097766e12bb49 /target-s390x | |
parent | 1191c94963f36b3f9631fcd1ec2e9296631b407e (diff) | |
download | qemu-46c804def4bda2491c546e8e33b86fe4981e4b68.zip qemu-46c804def4bda2491c546e8e33b86fe4981e4b68.tar.gz qemu-46c804def4bda2491c546e8e33b86fe4981e4b68.tar.bz2 |
s390x: move fpu regs into a subsection of the vmstate
Let's move the floating point registers into a seperate subsection and
bump up the version id. This cleans up the current vmstate and will
allow for a future extension with vector registers in a compatible way.
This patch is based on a patch from Eric Farman.
Reviewed-by: Eric Farman <farman@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'target-s390x')
-rw-r--r-- | target-s390x/machine.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/target-s390x/machine.c b/target-s390x/machine.c index bd4cea7..a034423 100644 --- a/target-s390x/machine.c +++ b/target-s390x/machine.c @@ -33,12 +33,11 @@ static int cpu_post_load(void *opaque, int version_id) return 0; } -const VMStateDescription vmstate_s390_cpu = { - .name = "cpu", - .post_load = cpu_post_load, - .version_id = 2, - .minimum_version_id = 2, - .fields = (VMStateField[]) { +const VMStateDescription vmstate_fpu = { + .name = "cpu/fpu", + .version_id = 1, + .minimum_version_id = 1, + .fields = (VMStateField[]) { VMSTATE_UINT64(env.fregs[0].ll, S390CPU), VMSTATE_UINT64(env.fregs[1].ll, S390CPU), VMSTATE_UINT64(env.fregs[2].ll, S390CPU), @@ -55,11 +54,26 @@ const VMStateDescription vmstate_s390_cpu = { VMSTATE_UINT64(env.fregs[13].ll, S390CPU), VMSTATE_UINT64(env.fregs[14].ll, S390CPU), VMSTATE_UINT64(env.fregs[15].ll, S390CPU), + VMSTATE_UINT32(env.fpc, S390CPU), + VMSTATE_END_OF_LIST() + } +}; + +static inline bool fpu_needed(void *opaque) +{ + return true; +} + +const VMStateDescription vmstate_s390_cpu = { + .name = "cpu", + .post_load = cpu_post_load, + .version_id = 3, + .minimum_version_id = 3, + .fields = (VMStateField[]) { 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), @@ -74,4 +88,12 @@ const VMStateDescription vmstate_s390_cpu = { VMSTATE_UINT8(env.sigp_order, S390CPU), VMSTATE_END_OF_LIST() }, + .subsections = (VMStateSubsection[]) { + { + .vmsd = &vmstate_fpu, + .needed = fpu_needed, + } , { + /* empty */ + } + }, }; |