Commit 372e458e authored by Peter Maydell's avatar Peter Maydell
Browse files

stellaris_input: Fix vmstate description of buttons field



gamepad_state::buttons is a pointer to an array of structs,
not an array of structs, so should be declared in the vmstate
with VMSTATE_STRUCT_VARRAY_POINTER_INT32; otherwise we
corrupt memory on incoming migration.

We bump the vmstate version field as the easiest way to
deal with the migration break, since migration wouldn't have
worked reliably before anyway.

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Reviewed-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: default avatarDamien Hedde <damien.hedde@greensocs.com>
Message-id: 20190725163710.11703-2-peter.maydell@linaro.org
parent 830fc739
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -60,12 +60,14 @@ static const VMStateDescription vmstate_stellaris_button = {

static const VMStateDescription vmstate_stellaris_gamepad = {
    .name = "stellaris_gamepad",
    .version_id = 1,
    .minimum_version_id = 1,
    .version_id = 2,
    .minimum_version_id = 2,
    .fields = (VMStateField[]) {
        VMSTATE_INT32(extension, gamepad_state),
        VMSTATE_STRUCT_VARRAY_INT32(buttons, gamepad_state, num_buttons, 0,
                              vmstate_stellaris_button, gamepad_button),
        VMSTATE_STRUCT_VARRAY_POINTER_INT32(buttons, gamepad_state,
                                            num_buttons,
                                            vmstate_stellaris_button,
                                            gamepad_button),
        VMSTATE_END_OF_LIST()
    }
};