@@ -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",
@@ -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), \
And use it on piix4 acpi. Comment asks for why this things happen! Signed-off-by: Juan Quintela <quintela@redhat.com> --- hw/acpi/piix4.c | 15 +++++++-------- include/migration/vmstate.h | 8 ++++++++ 2 files changed, 15 insertions(+), 8 deletions(-)