* [Qemu-devel] [0/6] Fill gaps in savevm support
@ 2012-09-26 3:21 David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers David Gibson
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: David Gibson @ 2012-09-26 3:21 UTC (permalink / raw)
To: aliguori; +Cc: qemu-devel
This is a series of fairly straightforward patches to fix some fairly
obvious gaps in the set of helpers for VMStateDescription buffers.
These just extend existing practice to some data types that didn't yet
have helper functions, presumably because there were not yet any
users.
I have draft savevm support for the pseries machine in the works which
need the various extensions here.
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers
2012-09-26 3:21 [Qemu-devel] [0/6] Fill gaps in savevm support David Gibson
@ 2012-09-26 3:21 ` David Gibson
2012-09-29 11:36 ` Blue Swirl
2012-09-26 3:21 ` [Qemu-devel] [PATCH 2/6] savevm: Add VMSTATE_UINTTL_EQUAL helper David Gibson
` (4 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: David Gibson @ 2012-09-26 3:21 UTC (permalink / raw)
To: aliguori; +Cc: qemu-devel, David Gibson
The savevm code already includes a number of *_EQUAL helpers which act as
sanity checks verifying that the configuration of the saved state matches
that of the machine we're loading into to work. Variants already exist
for 8 bit 16 bit and 32 bit integers, but not 64 bit integers. This patch
fills that hole, adding a UINT64 version.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
savevm.c | 20 ++++++++++++++++++++
vmstate.h | 7 +++++++
2 files changed, 27 insertions(+)
diff --git a/savevm.c b/savevm.c
index c7fe283..f38e16e 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1043,6 +1043,26 @@ const VMStateInfo vmstate_info_uint64 = {
.put = put_uint64,
};
+/* 64 bit unsigned int. See that the received value is the same than the one
+ in the field */
+
+static int get_uint64_equal(QEMUFile *f, void *pv, size_t size)
+{
+ uint64_t *v = pv;
+ uint64_t v2;
+ qemu_get_be64s(f, &v2);
+
+ if (*v == v2)
+ return 0;
+ return -EINVAL;
+}
+
+const VMStateInfo vmstate_info_uint64_equal = {
+ .name = "int64 equal",
+ .get = get_uint64_equal,
+ .put = put_uint64,
+};
+
/* 8 bit int. See that the received value is the same than the one
in the field */
diff --git a/vmstate.h b/vmstate.h
index c9c320e..6c7fbe0 100644
--- a/vmstate.h
+++ b/vmstate.h
@@ -129,6 +129,7 @@ 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_uint32_equal;
+extern const VMStateInfo vmstate_info_uint64_equal;
extern const VMStateInfo vmstate_info_int32_le;
extern const VMStateInfo vmstate_info_uint8;
@@ -488,6 +489,12 @@ extern const VMStateInfo vmstate_info_unused_buffer;
#define VMSTATE_UINT32_EQUAL(_f, _s) \
VMSTATE_SINGLE(_f, _s, 0, vmstate_info_uint32_equal, uint32_t)
+#define VMSTATE_UINT64_EQUAL_V(_f, _s, _v) \
+ VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint64_equal, uint64_t)
+
+#define VMSTATE_UINT64_EQUAL(_f, _s) \
+ VMSTATE_UINT64_EQUAL_V(_f, _s, 0)
+
#define VMSTATE_INT32_LE(_f, _s) \
VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_le, int32_t)
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 2/6] savevm: Add VMSTATE_UINTTL_EQUAL helper
2012-09-26 3:21 [Qemu-devel] [0/6] Fill gaps in savevm support David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers David Gibson
@ 2012-09-26 3:21 ` David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 3/6] savevm: Add VMSTATE_FLOAT64 helpers David Gibson
` (3 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: David Gibson @ 2012-09-26 3:21 UTC (permalink / raw)
To: aliguori; +Cc: qemu-devel, David Gibson
This adds an _EQUAL VMSTATE helper for target_ulongs, defined in terms of
VMSTATE_UINT32_EQUAL or VMSTATE_UINT64_EQUAL as appropriate.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/hw.h | 6 ++++++
vmstate.h | 7 +++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/hw/hw.h b/hw/hw.h
index e5cb9bf..3af287f 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -50,16 +50,22 @@ int qemu_boot_set(const char *boot_devices);
#if TARGET_LONG_BITS == 64
#define VMSTATE_UINTTL_V(_f, _s, _v) \
VMSTATE_UINT64_V(_f, _s, _v)
+#define VMSTATE_UINTTL_EQUAL_V(_f, _s, _v) \
+ VMSTATE_UINT64_EQUAL_V(_f, _s, _v)
#define VMSTATE_UINTTL_ARRAY_V(_f, _s, _n, _v) \
VMSTATE_UINT64_ARRAY_V(_f, _s, _n, _v)
#else
#define VMSTATE_UINTTL_V(_f, _s, _v) \
VMSTATE_UINT32_V(_f, _s, _v)
+#define VMSTATE_UINTTL_EQUAL_V(_f, _s, _v) \
+ VMSTATE_UINT32_EQUAL_V(_f, _s, _v)
#define VMSTATE_UINTTL_ARRAY_V(_f, _s, _n, _v) \
VMSTATE_UINT32_ARRAY_V(_f, _s, _n, _v)
#endif
#define VMSTATE_UINTTL(_f, _s) \
VMSTATE_UINTTL_V(_f, _s, 0)
+#define VMSTATE_UINTTL_EQUAL(_f, _s) \
+ VMSTATE_UINTTL_EQUAL_V(_f, _s, 0)
#define VMSTATE_UINTTL_ARRAY(_f, _s, _n) \
VMSTATE_UINTTL_ARRAY_V(_f, _s, _n, 0)
diff --git a/vmstate.h b/vmstate.h
index 6c7fbe0..5d1c4f5 100644
--- a/vmstate.h
+++ b/vmstate.h
@@ -486,8 +486,11 @@ extern const VMStateInfo vmstate_info_unused_buffer;
#define VMSTATE_INT32_EQUAL(_f, _s) \
VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_equal, int32_t)
-#define VMSTATE_UINT32_EQUAL(_f, _s) \
- VMSTATE_SINGLE(_f, _s, 0, vmstate_info_uint32_equal, uint32_t)
+#define VMSTATE_UINT32_EQUAL_V(_f, _s, _v) \
+ VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint32_equal, uint32_t)
+
+#define VMSTATE_UINT32_EQUAL(_f, _s) \
+ VMSTATE_UINT32_EQUAL_V(_f, _s, 0)
#define VMSTATE_UINT64_EQUAL_V(_f, _s, _v) \
VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint64_equal, uint64_t)
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 3/6] savevm: Add VMSTATE_FLOAT64 helpers
2012-09-26 3:21 [Qemu-devel] [0/6] Fill gaps in savevm support David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 2/6] savevm: Add VMSTATE_UINTTL_EQUAL helper David Gibson
@ 2012-09-26 3:21 ` David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 4/6] savevm: Add VMSTATE_ helpers for target_phys_addr_t David Gibson
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: David Gibson @ 2012-09-26 3:21 UTC (permalink / raw)
To: aliguori; +Cc: qemu-devel, David Gibson
The current savevm code includes VMSTATE helpers for a number of commonly
used data types, but not for the float64 type used by the internal floating
point emulation code. This patch fixes the deficiency.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
savevm.c | 23 +++++++++++++++++++++++
vmstate.h | 15 +++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/savevm.c b/savevm.c
index f38e16e..d091488 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1103,6 +1103,29 @@ const VMStateInfo vmstate_info_uint16_equal = {
.put = put_uint16,
};
+/* floating point */
+
+static int get_float64(QEMUFile *f, void *pv, size_t size)
+{
+ float64 *v = pv;
+
+ *v = make_float64(qemu_get_be64(f));
+ return 0;
+}
+
+static void put_float64(QEMUFile *f, void *pv, size_t size)
+{
+ uint64_t *v = pv;
+
+ qemu_put_be64(f, float64_val(*v));
+}
+
+const VMStateInfo vmstate_info_float64 = {
+ .name = "float64",
+ .get = get_float64,
+ .put = put_float64,
+};
+
/* timers */
static int get_timer(QEMUFile *f, void *pv, size_t size)
diff --git a/vmstate.h b/vmstate.h
index 5d1c4f5..a04561e 100644
--- a/vmstate.h
+++ b/vmstate.h
@@ -137,6 +137,8 @@ extern const VMStateInfo vmstate_info_uint16;
extern const VMStateInfo vmstate_info_uint32;
extern const VMStateInfo vmstate_info_uint64;
+extern const VMStateInfo vmstate_info_float64;
+
extern const VMStateInfo vmstate_info_timer;
extern const VMStateInfo vmstate_info_buffer;
extern const VMStateInfo vmstate_info_unused_buffer;
@@ -510,6 +512,13 @@ extern const VMStateInfo vmstate_info_unused_buffer;
#define VMSTATE_UINT32_TEST(_f, _s, _t) \
VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_uint32, uint32_t)
+
+#define VMSTATE_FLOAT64_V(_f, _s, _v) \
+ VMSTATE_SINGLE(_f, _s, _v, vmstate_info_float64, float64)
+
+#define VMSTATE_FLOAT64(_f, _s) \
+ VMSTATE_FLOAT64_V(_f, _s, 0)
+
#define VMSTATE_TIMER_TEST(_f, _s, _test) \
VMSTATE_POINTER_TEST(_f, _s, _test, vmstate_info_timer, QEMUTimer *)
@@ -576,6 +585,12 @@ extern const VMStateInfo vmstate_info_unused_buffer;
#define VMSTATE_INT64_ARRAY(_f, _s, _n) \
VMSTATE_INT64_ARRAY_V(_f, _s, _n, 0)
+#define VMSTATE_FLOAT64_ARRAY_V(_f, _s, _n, _v) \
+ VMSTATE_ARRAY(_f, _s, _n, _v, vmstate_info_float64, float64)
+
+#define VMSTATE_FLOAT64_ARRAY(_f, _s, _n) \
+ VMSTATE_FLOAT64_ARRAY_V(_f, _s, _n, 0)
+
#define VMSTATE_BUFFER_V(_f, _s, _v) \
VMSTATE_STATIC_BUFFER(_f, _s, _v, NULL, 0, sizeof(typeof_field(_s, _f)))
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 4/6] savevm: Add VMSTATE_ helpers for target_phys_addr_t
2012-09-26 3:21 [Qemu-devel] [0/6] Fill gaps in savevm support David Gibson
` (2 preceding siblings ...)
2012-09-26 3:21 ` [Qemu-devel] [PATCH 3/6] savevm: Add VMSTATE_FLOAT64 helpers David Gibson
@ 2012-09-26 3:21 ` David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 5/6] savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32 David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 6/6] savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition David Gibson
5 siblings, 0 replies; 10+ messages in thread
From: David Gibson @ 2012-09-26 3:21 UTC (permalink / raw)
To: aliguori; +Cc: qemu-devel, David Gibson
The savevm code contains VMSTATE_ helpers for a number of commonly used
types, but not for target_phys_addr_t. This patch fixes that deficiency
implementing VMSTATE_TPA helpers in terms of VMSTATE_UINT32 or
VMSTATE_UINT64 helpers as appropriate.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
targphys.h | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/targphys.h b/targphys.h
index bd4938f..39c1c63 100644
--- a/targphys.h
+++ b/targphys.h
@@ -21,6 +21,13 @@ typedef uint32_t target_phys_addr_t;
#define TARGET_PRIuPHYS PRIu32
#define TARGET_PRIxPHYS PRIx32
#define TARGET_PRIXPHYS PRIX32
+
+#define VMSTATE_TPA_V(_f, _s, _v) \
+ VMSTATE_UINT32_V(_f, _s, _v)
+
+#define VMSTATE_TPA_EQUAL_V(_f, _s, _v) \
+ VMSTATE_UINT32_EQUAL_V(_f, _s, _v)
+
#elif TARGET_PHYS_ADDR_BITS == 64
typedef uint64_t target_phys_addr_t;
#define TARGET_PHYS_ADDR_MAX UINT64_MAX
@@ -31,7 +38,19 @@ typedef uint64_t target_phys_addr_t;
#define TARGET_PRIuPHYS PRIu64
#define TARGET_PRIxPHYS PRIx64
#define TARGET_PRIXPHYS PRIX64
+
+#define VMSTATE_TPA_V(_f, _s, _v) \
+ VMSTATE_UINT64_V(_f, _s, _v)
+
+#define VMSTATE_TPA_EQUAL_V(_f, _s, _v) \
+ VMSTATE_UINT64_EQUAL_V(_f, _s, _v)
+
#endif
#endif
+#define VMSTATE_TPA(_f, _s) \
+ VMSTATE_TPA_V(_f, _s, 0)
+#define VMSTATE_TPA_EQUAL(_f, _s) \
+ VMSTATE_TPA_EQUAL_V(_f, _s, 0)
+
#endif
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 5/6] savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32
2012-09-26 3:21 [Qemu-devel] [0/6] Fill gaps in savevm support David Gibson
` (3 preceding siblings ...)
2012-09-26 3:21 ` [Qemu-devel] [PATCH 4/6] savevm: Add VMSTATE_ helpers for target_phys_addr_t David Gibson
@ 2012-09-26 3:21 ` David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 6/6] savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition David Gibson
5 siblings, 0 replies; 10+ messages in thread
From: David Gibson @ 2012-09-26 3:21 UTC (permalink / raw)
To: aliguori; +Cc: qemu-devel, David Gibson
Currently the savevm code contains a VMSTATE_STRUCT_VARRAY_POINTER_INT32
helper (a variably sized array with the number of elements in an int32_t),
but not VMSTATE_STRUCT_VARRAY_POINTER_UINT32 (... with the number of
elements in a uint32_t). This patch (trivially) fixes the deficiency.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
vmstate.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/vmstate.h b/vmstate.h
index a04561e..4b393a0 100644
--- a/vmstate.h
+++ b/vmstate.h
@@ -322,6 +322,16 @@ extern const VMStateInfo vmstate_info_unused_buffer;
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
+#define VMSTATE_STRUCT_VARRAY_POINTER_UINT32(_field, _state, _field_num, _vmsd, _type) { \
+ .name = (stringify(_field)), \
+ .version_id = 0, \
+ .num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
+ .size = sizeof(_type), \
+ .vmsd = &(_vmsd), \
+ .flags = VMS_POINTER | VMS_VARRAY_INT32 | VMS_STRUCT, \
+ .offset = vmstate_offset_pointer(_state, _field, _type), \
+}
+
#define VMSTATE_STRUCT_VARRAY_POINTER_UINT16(_field, _state, _field_num, _vmsd, _type) { \
.name = (stringify(_field)), \
.version_id = 0, \
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 6/6] savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition
2012-09-26 3:21 [Qemu-devel] [0/6] Fill gaps in savevm support David Gibson
` (4 preceding siblings ...)
2012-09-26 3:21 ` [Qemu-devel] [PATCH 5/6] savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32 David Gibson
@ 2012-09-26 3:21 ` David Gibson
5 siblings, 0 replies; 10+ messages in thread
From: David Gibson @ 2012-09-26 3:21 UTC (permalink / raw)
To: aliguori; +Cc: qemu-devel, David Gibson
The VMSTATE_BUFFER_MULTIPLY macro is misnamed - it actually specifies
a variably sized buffer with VMS_VBUFFER, so should be named
VMSTATE_VBUFFER_MULTIPLY. This patch fixes this (the macro had no current
users under either name).
In addition, unlike the other VMSTATE_VBUFFER variants, this macro did not
specify VMS_POINTER. This patch fixes this bug as well.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
vmstate.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/vmstate.h b/vmstate.h
index 4b393a0..6bfdb6a 100644
--- a/vmstate.h
+++ b/vmstate.h
@@ -372,14 +372,14 @@ extern const VMStateInfo vmstate_info_unused_buffer;
.offset = vmstate_offset_buffer(_state, _field) + _start, \
}
-#define VMSTATE_BUFFER_MULTIPLY(_field, _state, _version, _test, _start, _field_size, _multiply) { \
+#define VMSTATE_VBUFFER_MULTIPLY(_field, _state, _version, _test, _start, _field_size, _multiply) { \
.name = (stringify(_field)), \
.version_id = (_version), \
.field_exists = (_test), \
.size_offset = vmstate_offset_value(_state, _field_size, uint32_t),\
.size = (_multiply), \
.info = &vmstate_info_buffer, \
- .flags = VMS_VBUFFER|VMS_MULTIPLY, \
+ .flags = VMS_VBUFFER|VMS_POINTER|VMS_MULTIPLY, \
.offset = offsetof(_state, _field), \
.start = (_start), \
}
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers
2012-09-26 3:21 ` [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers David Gibson
@ 2012-09-29 11:36 ` Blue Swirl
2012-10-02 2:14 ` David Gibson
0 siblings, 1 reply; 10+ messages in thread
From: Blue Swirl @ 2012-09-29 11:36 UTC (permalink / raw)
To: David Gibson; +Cc: aliguori, qemu-devel
On Wed, Sep 26, 2012 at 3:21 AM, David Gibson
<david@gibson.dropbear.id.au> wrote:
> The savevm code already includes a number of *_EQUAL helpers which act as
> sanity checks verifying that the configuration of the saved state matches
> that of the machine we're loading into to work. Variants already exist
> for 8 bit 16 bit and 32 bit integers, but not 64 bit integers. This patch
> fills that hole, adding a UINT64 version.
>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> savevm.c | 20 ++++++++++++++++++++
> vmstate.h | 7 +++++++
> 2 files changed, 27 insertions(+)
>
> diff --git a/savevm.c b/savevm.c
> index c7fe283..f38e16e 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -1043,6 +1043,26 @@ const VMStateInfo vmstate_info_uint64 = {
> .put = put_uint64,
> };
>
> +/* 64 bit unsigned int. See that the received value is the same than the one
> + in the field */
> +
> +static int get_uint64_equal(QEMUFile *f, void *pv, size_t size)
> +{
> + uint64_t *v = pv;
> + uint64_t v2;
> + qemu_get_be64s(f, &v2);
> +
> + if (*v == v2)
Braces.
> + return 0;
> + return -EINVAL;
> +}
> +
> +const VMStateInfo vmstate_info_uint64_equal = {
> + .name = "int64 equal",
> + .get = get_uint64_equal,
> + .put = put_uint64,
> +};
> +
> /* 8 bit int. See that the received value is the same than the one
> in the field */
>
> diff --git a/vmstate.h b/vmstate.h
> index c9c320e..6c7fbe0 100644
> --- a/vmstate.h
> +++ b/vmstate.h
> @@ -129,6 +129,7 @@ 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_uint32_equal;
> +extern const VMStateInfo vmstate_info_uint64_equal;
> extern const VMStateInfo vmstate_info_int32_le;
>
> extern const VMStateInfo vmstate_info_uint8;
> @@ -488,6 +489,12 @@ extern const VMStateInfo vmstate_info_unused_buffer;
> #define VMSTATE_UINT32_EQUAL(_f, _s) \
> VMSTATE_SINGLE(_f, _s, 0, vmstate_info_uint32_equal, uint32_t)
>
> +#define VMSTATE_UINT64_EQUAL_V(_f, _s, _v) \
> + VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint64_equal, uint64_t)
> +
> +#define VMSTATE_UINT64_EQUAL(_f, _s) \
> + VMSTATE_UINT64_EQUAL_V(_f, _s, 0)
> +
> #define VMSTATE_INT32_LE(_f, _s) \
> VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_le, int32_t)
>
> --
> 1.7.10.4
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers
2012-09-29 11:36 ` Blue Swirl
@ 2012-10-02 2:14 ` David Gibson
0 siblings, 0 replies; 10+ messages in thread
From: David Gibson @ 2012-10-02 2:14 UTC (permalink / raw)
To: Blue Swirl; +Cc: aliguori, qemu-devel
On Sat, Sep 29, 2012 at 11:36:35AM +0000, Blue Swirl wrote:
> On Wed, Sep 26, 2012 at 3:21 AM, David Gibson
> <david@gibson.dropbear.id.au> wrote:
> > The savevm code already includes a number of *_EQUAL helpers which act as
> > sanity checks verifying that the configuration of the saved state matches
> > that of the machine we're loading into to work. Variants already exist
> > for 8 bit 16 bit and 32 bit integers, but not 64 bit integers. This patch
> > fills that hole, adding a UINT64 version.
> >
> > Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> > ---
> > savevm.c | 20 ++++++++++++++++++++
> > vmstate.h | 7 +++++++
> > 2 files changed, 27 insertions(+)
> >
> > diff --git a/savevm.c b/savevm.c
> > index c7fe283..f38e16e 100644
> > --- a/savevm.c
> > +++ b/savevm.c
> > @@ -1043,6 +1043,26 @@ const VMStateInfo vmstate_info_uint64 = {
> > .put = put_uint64,
> > };
> >
> > +/* 64 bit unsigned int. See that the received value is the same than the one
> > + in the field */
> > +
> > +static int get_uint64_equal(QEMUFile *f, void *pv, size_t size)
> > +{
> > + uint64_t *v = pv;
> > + uint64_t v2;
> > + qemu_get_be64s(f, &v2);
> > +
> > + if (*v == v2)
>
> Braces.
Oops, fixed for the next version.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers
2013-03-12 3:05 [Qemu-devel] [0/6] Simple extensions to VMStateDescription features David Gibson
@ 2013-03-12 3:06 ` David Gibson
0 siblings, 0 replies; 10+ messages in thread
From: David Gibson @ 2013-03-12 3:06 UTC (permalink / raw)
To: aliguori, quintela; +Cc: David Gibson, qemu-devel, agraf
The savevm code already includes a number of *_EQUAL helpers which act as
sanity checks verifying that the configuration of the saved state matches
that of the machine we're loading into to work. Variants already exist
for 8 bit 16 bit and 32 bit integers, but not 64 bit integers. This patch
fills that hole, adding a UINT64 version.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
v2: Added missing braces
---
include/migration/vmstate.h | 7 +++++++
savevm.c | 21 +++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index a64db94..cdb6af7 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -145,6 +145,7 @@ 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_uint32_equal;
+extern const VMStateInfo vmstate_info_uint64_equal;
extern const VMStateInfo vmstate_info_int32_le;
extern const VMStateInfo vmstate_info_uint8;
@@ -517,6 +518,12 @@ extern const VMStateInfo vmstate_info_bitmap;
#define VMSTATE_UINT32_EQUAL(_f, _s) \
VMSTATE_SINGLE(_f, _s, 0, vmstate_info_uint32_equal, uint32_t)
+#define VMSTATE_UINT64_EQUAL_V(_f, _s, _v) \
+ VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint64_equal, uint64_t)
+
+#define VMSTATE_UINT64_EQUAL(_f, _s) \
+ VMSTATE_UINT64_EQUAL_V(_f, _s, 0)
+
#define VMSTATE_INT32_LE(_f, _s) \
VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_le, int32_t)
diff --git a/savevm.c b/savevm.c
index 147e2d2..5dc678e 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1072,6 +1072,27 @@ const VMStateInfo vmstate_info_uint64 = {
.put = put_uint64,
};
+/* 64 bit unsigned int. See that the received value is the same than the one
+ in the field */
+
+static int get_uint64_equal(QEMUFile *f, void *pv, size_t size)
+{
+ uint64_t *v = pv;
+ uint64_t v2;
+ qemu_get_be64s(f, &v2);
+
+ if (*v == v2) {
+ return 0;
+ }
+ return -EINVAL;
+}
+
+const VMStateInfo vmstate_info_uint64_equal = {
+ .name = "int64 equal",
+ .get = get_uint64_equal,
+ .put = put_uint64,
+};
+
/* 8 bit int. See that the received value is the same than the one
in the field */
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2013-03-12 3:06 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-26 3:21 [Qemu-devel] [0/6] Fill gaps in savevm support David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers David Gibson
2012-09-29 11:36 ` Blue Swirl
2012-10-02 2:14 ` David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 2/6] savevm: Add VMSTATE_UINTTL_EQUAL helper David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 3/6] savevm: Add VMSTATE_FLOAT64 helpers David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 4/6] savevm: Add VMSTATE_ helpers for target_phys_addr_t David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 5/6] savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32 David Gibson
2012-09-26 3:21 ` [Qemu-devel] [PATCH 6/6] savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition David Gibson
-- strict thread matches above, loose matches on Subject: below --
2013-03-12 3:05 [Qemu-devel] [0/6] Simple extensions to VMStateDescription features David Gibson
2013-03-12 3:06 ` [Qemu-devel] [PATCH 1/6] savevm: Add VMSTATE_UINT64_EQUAL helpers David Gibson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).