@@ -121,6 +121,11 @@ static bool is_old_eeprom_version(void *opaque, int version_id)
return version_id == OLD_EEPROM_VERSION;
}
+static bool is_eeprom_version(void *opaque, int version_id)
+{
+ return version_id == EEPROM_VERSION;
+}
+
static const VMStateDescription vmstate_eeprom = {
.name = "eeprom",
.version_id = EEPROM_VERSION,
@@ -138,7 +143,7 @@ static const VMStateDescription vmstate_eeprom = {
VMSTATE_UINT8(addrbits, eeprom_t),
VMSTATE_UINT16_HACK_TEST(size, eeprom_t, is_old_eeprom_version),
VMSTATE_UNUSED_TEST(is_old_eeprom_version, 1),
- VMSTATE_UINT16_EQUAL_V(size, eeprom_t, EEPROM_VERSION),
+ VMSTATE_UINT16_EQUAL_TEST(size, eeprom_t, is_eeprom_version),
VMSTATE_UINT16(data, eeprom_t),
VMSTATE_VARRAY_UINT16_UNSAFE(contents, eeprom_t, size, 0,
vmstate_info_uint16, uint16_t),
@@ -570,11 +570,11 @@ extern const VMStateInfo vmstate_info_bitmap;
#define VMSTATE_UINT8_EQUAL(_f, _s) \
VMSTATE_SINGLE_TEST(_f, _s, NULL, 0, vmstate_info_uint8_equal, uint8_t)
-#define VMSTATE_UINT16_EQUAL(_f, _s) \
- VMSTATE_SINGLE(_f, _s, 0, vmstate_info_uint16_equal, uint16_t)
+#define VMSTATE_UINT16_EQUAL_TEST(_f, _s, _t) \
+ VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint16_equal, uint16_t)
-#define VMSTATE_UINT16_EQUAL_V(_f, _s, _v) \
- VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint16_equal, uint16_t)
+#define VMSTATE_UINT16_EQUAL(_f, _s) \
+ VMSTATE_UINT16_EQUAL_TEST(_f, _s, NULL)
#define VMSTATE_INT32_EQUAL(_f, _s) \
VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_equal, int32_t)
@@ -152,7 +152,7 @@ static int load_vmstate(const VMStateDescription *desc,
typedef struct TestSimple {
bool b_1, b_2;
uint8_t u8_1, u8_2;
- uint16_t u16_1, u16_2;
+ uint16_t u16_1, u16_2, u16_3;
uint32_t u32_1, u32_2;
uint64_t u64_1, u64_2;
int8_t i8_1, i8_2;
@@ -171,6 +171,7 @@ TestSimple obj_simple = {
.u8_1 = 130,
.u16_1 = 512,
.u16_2 = 45000,
+ .u16_3 = 512,
.u32_1 = 70000,
.u32_2 = 100000,
.u64_1 = 12121212,
@@ -368,12 +369,17 @@ static const VMStateDescription vmstate_simple_compare = {
.minimum_version_id_old = 1,
.fields = (VMStateField[]) {
VMSTATE_UINT8_EQUAL(u8_1, TestSimple),
+ VMSTATE_UINT16_EQUAL(u16_1, TestSimple),
+ VMSTATE_UINT16_EQUAL_TEST(u16_2, TestSimple, test_false),
+ VMSTATE_UINT16_EQUAL_TEST(u16_3, TestSimple, test_true),
VMSTATE_END_OF_LIST()
}
};
uint8_t wire_simple_compare[] = {
/* u8_1 */ 0x82,
+ /* u16_1 */ 0x02, 0x00,
+ /* u16_3 */ 0x02, 0x00,
QEMU_VM_EOF, /* just to ensure we won't get EOF reported prematurely */
};
We change only user of VMSTATE_UINT16_EQUAL_V to VMSTATE_UINT16_EQUAL_TEST. Signed-off-by: Juan Quintela <quintela@redhat.com> --- hw/nvram/eeprom93xx.c | 7 ++++++- include/migration/vmstate.h | 8 ++++---- tests/test-vmstate.c | 8 +++++++- 3 files changed, 17 insertions(+), 6 deletions(-)