Patchwork [16/25] vmstate: Introduce the concept of sub-arrays

login
register
mail settings
Submitter Juan Quintela
Date Oct. 19, 2009, 6:43 p.m.
Message ID <a5c30b8266879d231f49f127306647d167491794.1255976538.git.quintela@redhat.com>
Download mbox | patch
Permalink /patch/36408/
State New
Headers show

Comments

Juan Quintela - Oct. 19, 2009, 6:43 p.m.
VMSTATE_SUB_ARRAY(..., start, num, ...) saves the num elems starting at
position start of the array

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 hw/hw.h |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

Patch

diff --git a/hw/hw.h b/hw/hw.h
index d3bf0a7..b98f0c9 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -352,6 +352,9 @@  extern const VMStateInfo vmstate_info_unused_buffer;
     (offsetof(_state, _field) +                                      \
      type_check_array(_type, typeof_field(_state, _field), _num))

+#define vmstate_offset_sub_array(_state, _field, _type, _start)      \
+    (offsetof(_state, _field[_start]))
+
 #define vmstate_offset_buffer(_state, _field)                        \
     vmstate_offset_array(_state, _field, uint8_t,                    \
                          sizeof(typeof_field(_state, _field)))
@@ -395,6 +398,16 @@  extern const VMStateInfo vmstate_info_unused_buffer;
     .offset       = vmstate_offset_array(_state, _field, _type, _num),\
 }

+#define VMSTATE_SUB_ARRAY(_field, _state, _start, _num, _version, _info, _type) { \
+    .name       = (stringify(_field)),                               \
+    .version_id = (_version),                                        \
+    .num        = (_num),                                            \
+    .info       = &(_info),                                          \
+    .size       = sizeof(_type),                                     \
+    .flags      = VMS_ARRAY,                                         \
+    .offset     = vmstate_offset_sub_array(_state, _field, _type, _start), \
+}
+
 #define VMSTATE_VARRAY_INT32(_field, _state, _field_num, _version, _info, _type) {\
     .name       = (stringify(_field)),                               \
     .version_id = (_version),                                        \
@@ -614,6 +627,12 @@  extern const VMStateDescription vmstate_i2c_slave;
 #define VMSTATE_INT32_ARRAY(_f, _s, _n)                               \
     VMSTATE_INT32_ARRAY_V(_f, _s, _n, 0)

+#define VMSTATE_UINT32_SUB_ARRAY(_f, _s, _start, _num)                \
+    VMSTATE_SUB_ARRAY(_f, _s, _start, _num, 0, vmstate_info_uint32, uint32_t)
+
+#define VMSTATE_UINT32_ARRAY(_f, _s, _n)                              \
+    VMSTATE_UINT32_ARRAY_V(_f, _s, _n, 0)
+
 #define VMSTATE_BUFFER_V(_f, _s, _v)                                  \
     VMSTATE_STATIC_BUFFER(_f, _s, _v, 0, sizeof(typeof_field(_s, _f)))