diff mbox series

[v3,2/6] migration/vmstate: Introduce VMSTATE_WITH_TMP_TEST() and VMSTATE_BITMAP_TEST()

Message ID 20221222110215.130392-3-david@redhat.com (mailing list archive)
State New, archived
Headers show
Series virtio-mem: Handle preallocation with migration | expand

Commit Message

David Hildenbrand Dec. 22, 2022, 11:02 a.m. UTC
We'll make use of both next in the context of virtio-mem.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 include/migration/vmstate.h | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Comments

Dr. David Alan Gilbert Jan. 5, 2023, 5:33 p.m. UTC | #1
* David Hildenbrand (david@redhat.com) wrote:
> We'll make use of both next in the context of virtio-mem.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  include/migration/vmstate.h | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> index 79eb2409a2..73ad1ae0eb 100644
> --- a/include/migration/vmstate.h
> +++ b/include/migration/vmstate.h
> @@ -712,8 +712,9 @@ extern const VMStateInfo vmstate_info_qlist;
>   *        '_state' type
>   *    That the pointer is right at the start of _tmp_type.
>   */
> -#define VMSTATE_WITH_TMP(_state, _tmp_type, _vmsd) {                 \
> +#define VMSTATE_WITH_TMP_TEST(_state, _test, _tmp_type, _vmsd) {     \
>      .name         = "tmp",                                           \
> +    .field_exists = (_test),                                         \
>      .size         = sizeof(_tmp_type) +                              \
>                      QEMU_BUILD_BUG_ON_ZERO(offsetof(_tmp_type, parent) != 0) + \
>                      type_check_pointer(_state,                       \
> @@ -722,6 +723,9 @@ extern const VMStateInfo vmstate_info_qlist;
>      .info         = &vmstate_info_tmp,                               \
>  }
>  
> +#define VMSTATE_WITH_TMP(_state, _tmp_type, _vmsd) \
> +    VMSTATE_WITH_TMP_TEST(_state, NULL, _tmp_type, _vmsd)
> +
>  #define VMSTATE_UNUSED_BUFFER(_test, _version, _size) {              \
>      .name         = "unused",                                        \
>      .field_exists = (_test),                                         \
> @@ -745,8 +749,9 @@ extern const VMStateInfo vmstate_info_qlist;
>  /* _field_size should be a int32_t field in the _state struct giving the
>   * size of the bitmap _field in bits.
>   */
> -#define VMSTATE_BITMAP(_field, _state, _version, _field_size) {      \
> +#define VMSTATE_BITMAP_TEST(_field, _state, _test, _version, _field_size) { \
>      .name         = (stringify(_field)),                             \
> +    .field_exists = (_test),                                         \
>      .version_id   = (_version),                                      \
>      .size_offset  = vmstate_offset_value(_state, _field_size, int32_t),\
>      .info         = &vmstate_info_bitmap,                            \
> @@ -754,6 +759,9 @@ extern const VMStateInfo vmstate_info_qlist;
>      .offset       = offsetof(_state, _field),                        \
>  }
>  
> +#define VMSTATE_BITMAP(_field, _state, _version, _field_size) \
> +    VMSTATE_BITMAP_TEST(_field, _state, NULL, _version, _field_size)
> +
>  /* For migrating a QTAILQ.
>   * Target QTAILQ needs be properly initialized.
>   * _type: type of QTAILQ element
> -- 
> 2.38.1
>
diff mbox series

Patch

diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 79eb2409a2..73ad1ae0eb 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -712,8 +712,9 @@  extern const VMStateInfo vmstate_info_qlist;
  *        '_state' type
  *    That the pointer is right at the start of _tmp_type.
  */
-#define VMSTATE_WITH_TMP(_state, _tmp_type, _vmsd) {                 \
+#define VMSTATE_WITH_TMP_TEST(_state, _test, _tmp_type, _vmsd) {     \
     .name         = "tmp",                                           \
+    .field_exists = (_test),                                         \
     .size         = sizeof(_tmp_type) +                              \
                     QEMU_BUILD_BUG_ON_ZERO(offsetof(_tmp_type, parent) != 0) + \
                     type_check_pointer(_state,                       \
@@ -722,6 +723,9 @@  extern const VMStateInfo vmstate_info_qlist;
     .info         = &vmstate_info_tmp,                               \
 }
 
+#define VMSTATE_WITH_TMP(_state, _tmp_type, _vmsd) \
+    VMSTATE_WITH_TMP_TEST(_state, NULL, _tmp_type, _vmsd)
+
 #define VMSTATE_UNUSED_BUFFER(_test, _version, _size) {              \
     .name         = "unused",                                        \
     .field_exists = (_test),                                         \
@@ -745,8 +749,9 @@  extern const VMStateInfo vmstate_info_qlist;
 /* _field_size should be a int32_t field in the _state struct giving the
  * size of the bitmap _field in bits.
  */
-#define VMSTATE_BITMAP(_field, _state, _version, _field_size) {      \
+#define VMSTATE_BITMAP_TEST(_field, _state, _test, _version, _field_size) { \
     .name         = (stringify(_field)),                             \
+    .field_exists = (_test),                                         \
     .version_id   = (_version),                                      \
     .size_offset  = vmstate_offset_value(_state, _field_size, int32_t),\
     .info         = &vmstate_info_bitmap,                            \
@@ -754,6 +759,9 @@  extern const VMStateInfo vmstate_info_qlist;
     .offset       = offsetof(_state, _field),                        \
 }
 
+#define VMSTATE_BITMAP(_field, _state, _version, _field_size) \
+    VMSTATE_BITMAP_TEST(_field, _state, NULL, _version, _field_size)
+
 /* For migrating a QTAILQ.
  * Target QTAILQ needs be properly initialized.
  * _type: type of QTAILQ element