[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 2/8] vmstate: Introduce VMSTATE_VARRAY_MULTPLY
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH v2 2/8] vmstate: Introduce VMSTATE_VARRAY_MULTPLY |
Date: |
Mon, 11 Jan 2016 12:40:22 +0000 |
From: Juan Quintela <address@hidden>
This allows to send a partial array where the size is another
structure field multiplied by a constant.
Signed-off-by: Juan Quintela <address@hidden>
[PMM: updated to current master]
Signed-off-by: Peter Maydell <address@hidden>
---
include/migration/vmstate.h | 11 +++++++++++
migration/vmstate.c | 4 ++++
2 files changed, 15 insertions(+)
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index a389bdc..4e8495d 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -102,6 +102,7 @@ enum VMStateFlags {
VMS_VARRAY_UINT32 = 0x800, /* Array with size in uint32_t field*/
VMS_MUST_EXIST = 0x1000, /* Field must exist in input */
VMS_ALLOC = 0x2000, /* Alloc a buffer on the destination */
+ VMS_MULTIPLY_ELEMENTS = 0x4000, /* multiply varray size by field->num */
};
typedef struct {
@@ -246,6 +247,16 @@ extern const VMStateInfo vmstate_info_bitmap;
.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) {\
.name = (stringify(_field)), \
.field_exists = (_test), \
diff --git a/migration/vmstate.c b/migration/vmstate.c
index f70fe59..a7ad7f2 100644
--- a/migration/vmstate.c
+++ b/migration/vmstate.c
@@ -28,6 +28,10 @@ static int vmstate_n_elems(void *opaque, VMStateField *field)
n_elems = *(uint8_t *)(opaque+field->num_offset);
}
+ if (field->flags & VMS_MULTIPLY_ELEMENTS) {
+ n_elems *= field->num;
+ }
+
return n_elems;
}
--
1.9.1
- [Qemu-devel] [PATCH v2 0/8] target-sparc: Update to use VMStateDescription, Peter Maydell, 2016/01/11
- [Qemu-devel] [PATCH v2 7/8] target-sparc: Use VMState arrays for SPARC64 TLB/MMU state, Peter Maydell, 2016/01/11
- [Qemu-devel] [PATCH v2 6/8] target-sparc: Convert to VMStateDescription, Peter Maydell, 2016/01/11
- [Qemu-devel] [PATCH v2 3/8] vmstate: define vmstate_info_uinttl, Peter Maydell, 2016/01/11
- [Qemu-devel] [PATCH v2 5/8] target-sparc: Don't flush TLB in cpu_load function, Peter Maydell, 2016/01/11
- [Qemu-devel] [PATCH v2 1/8] vmstate: introduce CPU_DoubleU arrays, Peter Maydell, 2016/01/11
- [Qemu-devel] [PATCH v2 4/8] target-sparc: Split cpu_put_psr into side-effect and no-side-effect parts, Peter Maydell, 2016/01/11
- [Qemu-devel] [PATCH v2 2/8] vmstate: Introduce VMSTATE_VARRAY_MULTPLY,
Peter Maydell <=
- [Qemu-devel] [PATCH v2 8/8] target-sparc: Migrate CWP and PIL for SPARC64, Peter Maydell, 2016/01/11
- Re: [Qemu-devel] [PATCH v2 0/8] target-sparc: Update to use VMStateDescription, Mark Cave-Ayland, 2016/01/15