On 7/25/19 7:02 PM, Dr. David Alan Gilbert wrote: > * Peter Maydell (peter.mayd...@linaro.org) wrote: >> 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: Peter Maydell <peter.mayd...@linaro.org> > > OK, it would be great to change num_buttons to uint32_t and make that a > UINT32 at some point; it's hard to press negative buttons.
Since the version is incremented, now seems to be a good time. > > Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> > >> --- >> hw/input/stellaris_input.c | 10 ++++++---- >> 1 file changed, 6 insertions(+), 4 deletions(-) >> >> diff --git a/hw/input/stellaris_input.c b/hw/input/stellaris_input.c >> index 20c87d86f40..3a666d61d47 100644 >> --- a/hw/input/stellaris_input.c >> +++ b/hw/input/stellaris_input.c >> @@ -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() >> } >> }; >> -- >> 2.20.1 >> > -- > Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK >