Commit b2ac0ff5 authored by Eric Farman's avatar Eric Farman Committed by Cornelia Huck
Browse files

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: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: default avatarEric Farman <farman@linux.vnet.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
parent 3ceeb293
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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
+61 −0
Original line number Diff line number Diff line
@@ -73,6 +73,64 @@ static inline bool fpu_needed(void *opaque)
    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 = {
    .name = "cpu",
    .post_load = cpu_post_load,
@@ -105,6 +163,9 @@ const VMStateDescription vmstate_s390_cpu = {
        {
            .vmsd = &vmstate_fpu,
            .needed = fpu_needed,
        } , {
            .vmsd = &vmstate_vregs,
            .needed = vregs_needed,
        } , {
            /* empty */
        }