[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 03/19] savevm: Implement VMS_DIVIDE flag
From: |
Alexey Kardashevskiy |
Subject: |
[Qemu-ppc] [PATCH 03/19] savevm: Implement VMS_DIVIDE flag |
Date: |
Sat, 6 Jul 2013 23:54:00 +1000 |
From: David Gibson <address@hidden>
The vmstate infrastructure includes a VMS_MULTIPY flag, and associated
VMSTATE_VBUFFER_MULTIPLY helper macro. These can be used to save a
variably sized buffer where the size in bytes of the buffer isn't directly
accessible as a structure field, but an element count from which the size
can be derived is.
This patch adds an analogous VMS_DIVIDE option, which handles a variably
sized buffer whose size is a submultiple of a field, rather than a
multiple. For example a buffer containing per-page structures whose size
is derived from a field storing the total address space described by the
structures could use this construct.
Signed-off-by: David Gibson <address@hidden>
Signed-off-by: Alexey Kardashevskiy <address@hidden>
---
include/migration/vmstate.h | 13 +++++++++++++
savevm.c | 8 ++++++++
2 files changed, 21 insertions(+)
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 1c31b5d..672b0a7 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -100,6 +100,7 @@ enum VMStateFlags {
VMS_MULTIPLY = 0x200, /* multiply "size" field by field_size */
VMS_VARRAY_UINT8 = 0x400, /* Array with size in uint8_t field*/
VMS_VARRAY_UINT32 = 0x800, /* Array with size in uint32_t field*/
+ VMS_DIVIDE = 0x1000, /* divide "size" field by field_size */
};
typedef struct {
@@ -422,6 +423,18 @@ extern const VMStateInfo vmstate_info_bitmap;
.start = (_start), \
}
+#define VMSTATE_VBUFFER_DIVIDE(_field, _state, _version, _test, _start,
_field_size, _divide) { \
+ .name = (stringify(_field)), \
+ .version_id = (_version), \
+ .field_exists = (_test), \
+ .size_offset = vmstate_offset_value(_state, _field_size, uint32_t),\
+ .size = (_divide), \
+ .info = &vmstate_info_buffer, \
+ .flags = VMS_VBUFFER|VMS_POINTER|VMS_DIVIDE, \
+ .offset = offsetof(_state, _field), \
+ .start = (_start), \
+}
+
#define VMSTATE_VBUFFER(_field, _state, _version, _test, _start, _field_size)
{ \
.name = (stringify(_field)), \
.version_id = (_version), \
diff --git a/savevm.c b/savevm.c
index e0491e7..788af85 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1700,6 +1700,10 @@ int vmstate_load_state(QEMUFile *f, const
VMStateDescription *vmsd,
if (field->flags & VMS_MULTIPLY) {
size *= field->size;
}
+ if (field->flags & VMS_DIVIDE) {
+ assert((size % field->size) == 0);
+ size /= field->size;
+ }
}
if (field->flags & VMS_ARRAY) {
n_elems = field->num;
@@ -1764,6 +1768,10 @@ void vmstate_save_state(QEMUFile *f, const
VMStateDescription *vmsd,
if (field->flags & VMS_MULTIPLY) {
size *= field->size;
}
+ if (field->flags & VMS_DIVIDE) {
+ assert((size % field->size) == 0);
+ size /= field->size;
+ }
}
if (field->flags & VMS_ARRAY) {
n_elems = field->num;
--
1.8.3.2
- [Qemu-ppc] [PATCH 00/19 v4] spapr: migration, pci, msi, power8, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 01/19] pseries: move interrupt controllers to hw/intc/, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 02/19] pseries: rework XICS, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 03/19] savevm: Implement VMS_DIVIDE flag,
Alexey Kardashevskiy <=
- [Qemu-ppc] [PATCH 04/19] target-ppc: Convert ppc cpu savevm to VMStateDescription, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 05/19] pseries: savevm support for XICS interrupt controller, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 06/19] pseries: savevm support for VIO devices, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 07/19] pseries: savevm support for PAPR VIO logical lan, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 09/19] pseries: savevm support for PAPR TCE tables, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 10/19] pseries: rework PAPR virtual SCSI, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 11/19] pseries: savevm support for PAPR virtual SCSI, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 12/19] pseries: savevm support for pseries machine, Alexey Kardashevskiy, 2013/07/06
- [Qemu-ppc] [PATCH 13/19] pseries: savevm support for PCI host bridge, Alexey Kardashevskiy, 2013/07/06