s390x: Migrate vector registers
When migrating a guest, be sure to include the vector registers. The vector registers are defined in a subsection, similar to the existing subsection for floating point registers. Since the floating point registers are always present (and thus migrated), we can skip them when performing the migration of the vector registers which may or may not be present. Suggested-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Eric Farman <farman@linux.vnet.ibm.com> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
3ceeb2930f
commit
b2ac0ff5d9
@ -1190,4 +1190,18 @@ static inline int s390_assign_subch_ioeventfd(EventNotifier *notifier,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_KVM
|
||||||
|
static inline bool vregs_needed(void *opaque)
|
||||||
|
{
|
||||||
|
if (kvm_enabled()) {
|
||||||
|
return kvm_check_extension(kvm_state, KVM_CAP_S390_VECTOR_REGISTERS);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool vregs_needed(void *opaque)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -73,6 +73,64 @@ static inline bool fpu_needed(void *opaque)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const VMStateDescription vmstate_vregs = {
|
||||||
|
.name = "cpu/vregs",
|
||||||
|
.version_id = 1,
|
||||||
|
.minimum_version_id = 1,
|
||||||
|
.fields = (VMStateField[]) {
|
||||||
|
/* vregs[0][0] -> vregs[15][0] and fregs are overlays */
|
||||||
|
VMSTATE_UINT64(env.vregs[16][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[17][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[18][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[19][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[20][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[21][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[22][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[23][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[24][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[25][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[26][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[27][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[28][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[29][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[30][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[31][0].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[0][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[1][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[2][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[3][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[4][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[5][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[6][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[7][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[8][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[9][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[10][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[11][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[12][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[13][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[14][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[15][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[16][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[17][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[18][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[19][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[20][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[21][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[22][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[23][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[24][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[25][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[26][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[27][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[28][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[29][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[30][1].ll, S390CPU),
|
||||||
|
VMSTATE_UINT64(env.vregs[31][1].ll, S390CPU),
|
||||||
|
VMSTATE_END_OF_LIST()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const VMStateDescription vmstate_s390_cpu = {
|
const VMStateDescription vmstate_s390_cpu = {
|
||||||
.name = "cpu",
|
.name = "cpu",
|
||||||
.post_load = cpu_post_load,
|
.post_load = cpu_post_load,
|
||||||
@ -105,6 +163,9 @@ const VMStateDescription vmstate_s390_cpu = {
|
|||||||
{
|
{
|
||||||
.vmsd = &vmstate_fpu,
|
.vmsd = &vmstate_fpu,
|
||||||
.needed = fpu_needed,
|
.needed = fpu_needed,
|
||||||
|
} , {
|
||||||
|
.vmsd = &vmstate_vregs,
|
||||||
|
.needed = vregs_needed,
|
||||||
} , {
|
} , {
|
||||||
/* empty */
|
/* empty */
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user