And use it on piix4 acpi. Comment asks for why this things happen! Signed-off-by: Juan Quintela <quint...@redhat.com> --- hw/acpi/piix4.c | 15 +++++++-------- include/migration/vmstate.h | 8 ++++++++ 2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 527a5c8..267b611 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -163,15 +163,14 @@ static int vmstate_acpi_post_load(void *opaque, int version_id) return 0; } +/* + * Comment goes here why we are sending a uint16_t value through an + * uint8_t pointer. And why we call it an array, when we only sent + * a single value. + */ + #define VMSTATE_GPE_ARRAY(_field, _state) \ - { \ - .name = (stringify(_field)), \ - .version_id = 0, \ - .info = &vmstate_info_uint16, \ - .size = sizeof(uint16_t), \ - .flags = VMS_SINGLE | VMS_POINTER, \ - .offset = vmstate_offset_pointer(_state, _field, uint8_t), \ - } + VMSTATE_POINTER_UNSAFE(_field, _state, vmstate_info_uint16, uint16_t) static const VMStateDescription vmstate_gpe = { .name = "gpe", diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 8de6988..a83aba9 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -210,6 +210,14 @@ extern const VMStateInfo vmstate_info_bitmap; .offset = vmstate_offset_value(_state, _field, _type), \ } +#define VMSTATE_POINTER_UNSAFE(_field, _state, _info, _type) { \ + .name = (stringify(_field)), \ + .info = &(_info), \ + .size = sizeof(_type), \ + .flags = VMS_SINGLE|VMS_POINTER, \ + .offset = offsetof(_state, _field), \ +} + #define VMSTATE_2DARRAY(_field, _state, _n1, _n2, _test, _info, _type) { \ .name = (stringify(_field)), \ .field_exists = (_test), \ -- 1.9.0