And use it on piix4 acpi.
Comment asks for why this things happen!
Signed-off-by: Juan Quintela <[email protected]>
---
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