mirror of https://github.com/xemu-project/xemu.git
vmstate: Introduce VMSTATE_VARRAY_MULTPLY
This allows to send a partial array where the size is another structure field multiplied by a constant. Signed-off-by: Juan Quintela <quintela@redhat.com> [PMM: updated to current master] Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
This commit is contained in:
parent
551747491d
commit
b47d3af755
|
@ -102,6 +102,7 @@ enum VMStateFlags {
|
||||||
VMS_VARRAY_UINT32 = 0x800, /* Array with size in uint32_t field*/
|
VMS_VARRAY_UINT32 = 0x800, /* Array with size in uint32_t field*/
|
||||||
VMS_MUST_EXIST = 0x1000, /* Field must exist in input */
|
VMS_MUST_EXIST = 0x1000, /* Field must exist in input */
|
||||||
VMS_ALLOC = 0x2000, /* Alloc a buffer on the destination */
|
VMS_ALLOC = 0x2000, /* Alloc a buffer on the destination */
|
||||||
|
VMS_MULTIPLY_ELEMENTS = 0x4000, /* multiply varray size by field->num */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -246,6 +247,16 @@ extern const VMStateInfo vmstate_info_bitmap;
|
||||||
.offset = vmstate_offset_2darray(_state, _field, _type, _n1, _n2), \
|
.offset = vmstate_offset_2darray(_state, _field, _type, _n1, _n2), \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define VMSTATE_VARRAY_MULTIPLY(_field, _state, _field_num, _multiply, _info, _type) { \
|
||||||
|
.name = (stringify(_field)), \
|
||||||
|
.num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
|
||||||
|
.num = (_multiply), \
|
||||||
|
.info = &(_info), \
|
||||||
|
.size = sizeof(_type), \
|
||||||
|
.flags = VMS_VARRAY_UINT32|VMS_MULTIPLY_ELEMENTS, \
|
||||||
|
.offset = offsetof(_state, _field), \
|
||||||
|
}
|
||||||
|
|
||||||
#define VMSTATE_ARRAY_TEST(_field, _state, _num, _test, _info, _type) {\
|
#define VMSTATE_ARRAY_TEST(_field, _state, _num, _test, _info, _type) {\
|
||||||
.name = (stringify(_field)), \
|
.name = (stringify(_field)), \
|
||||||
.field_exists = (_test), \
|
.field_exists = (_test), \
|
||||||
|
|
|
@ -28,6 +28,10 @@ static int vmstate_n_elems(void *opaque, VMStateField *field)
|
||||||
n_elems = *(uint8_t *)(opaque+field->num_offset);
|
n_elems = *(uint8_t *)(opaque+field->num_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (field->flags & VMS_MULTIPLY_ELEMENTS) {
|
||||||
|
n_elems *= field->num;
|
||||||
|
}
|
||||||
|
|
||||||
return n_elems;
|
return n_elems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue