qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 78/97] vmstate: Create VMSTATE_POINTER_UNSAFE


From: Juan Quintela
Subject: [Qemu-devel] [PATCH 78/97] vmstate: Create VMSTATE_POINTER_UNSAFE
Date: Mon, 7 Apr 2014 05:21:36 +0200

And use it on piix4 acpi.
Comment asks for why this things happen!

Signed-off-by: Juan Quintela <address@hidden>
---
 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 d0115e6..7418c64 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]