Signed-off-by: Juan Quintela <quint...@redhat.com> --- hw/hw.h | 7 +++++++ savevm.c | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h index 5f48ef8..9a40b43 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -322,6 +322,7 @@ extern const VMStateInfo vmstate_info_int32; extern const VMStateInfo vmstate_info_int64; extern const VMStateInfo vmstate_info_uint8_equal; +extern const VMStateInfo vmstate_info_uint16_equal; extern const VMStateInfo vmstate_info_int32_equal; extern const VMStateInfo vmstate_info_int32_le; @@ -550,6 +551,12 @@ extern const VMStateDescription vmstate_i2c_slave; #define VMSTATE_UINT8_EQUAL(_f, _s) \ VMSTATE_SINGLE(_f, _s, 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_V(_f, _s, _v) \ + VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint16_equal, uint16_t) + #define VMSTATE_INT32_EQUAL(_f, _s) \ VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_equal, int32_t) diff --git a/savevm.c b/savevm.c index 3d91202..6a10bc7 100644 --- a/savevm.c +++ b/savevm.c @@ -868,6 +868,26 @@ const VMStateInfo vmstate_info_uint8_equal = { .put = put_uint8, }; +/* 16 bit unsigned int int. See that the received value is the same than the one + in the field */ + +static int get_uint16_equal(QEMUFile *f, void *pv, size_t size) +{ + uint16_t *v = pv; + uint16_t v2; + qemu_get_be16s(f, &v2); + + if (*v == v2) + return 0; + return -EINVAL; +} + +const VMStateInfo vmstate_info_uint16_equal = { + .name = "uint16 equal", + .get = get_uint16_equal, + .put = put_uint16, +}; + /* timers */ static int get_timer(QEMUFile *f, void *pv, size_t size) -- 1.6.2.5