Commit 1f0b40dccf for qemu.org
commit 1f0b40dccfe54849d45a7126af0398645b2bd231
Author: Fabiano Rosas <farosas@suse.de>
Date: Tue Aug 18 15:24:36 2026 -0300
migration: Remove redundant flags
Remove the VMS_VARRAY and VMS_VBUFFER flags that became redundant due
to the previous commit which stores the size of the vmstate offset
variables along with the offset itself.
Acked-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 12bfa64fb9..a168651a06 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -69,8 +69,9 @@ enum VMStateFlags {
* }). Dereference the pointer before using it as basis for
* further pointer arithmetic (see e.g. VMS_ARRAY). Does not
* affect the meaning of VMStateField.num_indirect or
- * VMStateField.size_indirect; see VMS_VARRAY* and VMS_VBUFFER for
- * those. */
+ * VMStateField.size_indirect; see VMS_VARRAY and VMS_VBUFFER for
+ * those.
+ */
VMS_POINTER = 0x002,
/* The field is an array of fixed size. VMStateField.num contains
@@ -80,12 +81,13 @@ enum VMStateFlags {
* VMS_MULTIPLY. Each array entry will be processed individually
* (VMStateField.info.get()/put() if VMS_STRUCT is not set,
* recursion into VMStateField.vmsd if VMS_STRUCT is set). May not
- * be combined with VMS_VARRAY*. */
+ * be combined with VMS_VARRAY.
+ */
VMS_ARRAY = 0x004,
/* The field is itself a struct, containing one or more
* fields. Recurse into VMStateField.vmsd. Most useful in
- * combination with VMS_ARRAY / VMS_VARRAY*, recursing into each
+ * combination with VMS_ARRAY / VMS_VARRAY, recursing into each
* array entry. */
VMS_STRUCT = 0x008,
@@ -93,9 +95,9 @@ enum VMStateFlags {
* The field is an array of variable size. The integer at opaque +
* VMStateField.num_indirect contains the number of entries in the
* array. See the VMS_ARRAY description regarding array handling
- * in general. May not be combined with VMS_ARRAY or any other
- * VMS_VARRAY*. */
- VMS_VARRAY_INT32 = 0x010,
+ * in general. May not be combined with VMS_ARRAY.
+ */
+ VMS_VARRAY = 0x010,
/* Ignored */
VMS_BUFFER = 0x020,
@@ -103,18 +105,12 @@ enum VMStateFlags {
/* The field is a (fixed-size or variable-size) array of pointers
* (e.g. struct a { uint8_t *b[]; }). Dereference each array entry
* before using it. Note: Does not imply any one of VMS_ARRAY /
- * VMS_VARRAY*; these need to be set explicitly. */
+ * VMS_VARRAY; these need to be set explicitly.
+ */
VMS_ARRAY_OF_POINTER = 0x040,
- /* The field is an array of variable size. The uint16_t at opaque
- * + VMStateField.num_indirect
- * contains the number of entries in the array. See the VMS_ARRAY
- * description regarding array handling in general. May not be
- * combined with VMS_ARRAY or any other VMS_VARRAY*. */
- VMS_VARRAY_UINT16 = 0x080,
-
/* The size of the individual entries (a single array entry if
- * VMS_ARRAY or any of VMS_VARRAY* are set, or the field itself if
+ * VMS_ARRAY or VMS_VARRAY are set, or the field itself if
* neither is set) is variable (i.e. not known at compile-time),
* but the same for all entries. Use the integer at opaque +
* VMStateField.size_indirect (subject to VMS_MULTIPLY) to determine
@@ -128,20 +124,6 @@ enum VMStateFlags {
* allocated. Only valid in combination with VMS_VBUFFER. */
VMS_MULTIPLY = 0x200,
- /* The field is an array of variable size. The uint8_t at opaque +
- * VMStateField.num_indirect
- * contains the number of entries in the array. See the VMS_ARRAY
- * description regarding array handling in general. May not be
- * combined with VMS_ARRAY or any other VMS_VARRAY*. */
- VMS_VARRAY_UINT8 = 0x400,
-
- /* The field is an array of variable size. The uint32_t at opaque
- * + VMStateField.num_indirect
- * contains the number of entries in the array. See the VMS_ARRAY
- * description regarding array handling in general. May not be
- * combined with VMS_ARRAY or any other VMS_VARRAY*. */
- VMS_VARRAY_UINT32 = 0x800,
-
/* Fail loading the serialised VM state if this field is missing
* from the input. */
VMS_MUST_EXIST = 0x1000,
@@ -530,7 +512,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.info = &(_info), \
.size = sizeof(_type), \
- .flags = VMS_VARRAY_INT32|VMS_POINTER, \
+ .flags = VMS_VARRAY | VMS_POINTER, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -540,7 +522,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.info = &(_info), \
.size = sizeof(_type), \
- .flags = VMS_VARRAY_UINT32|VMS_POINTER, \
+ .flags = VMS_VARRAY | VMS_POINTER, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -550,7 +532,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.info = &(_info), \
.size = sizeof(_type), \
- .flags = VMS_VARRAY_INT32 | VMS_POINTER | VMS_ALLOC, \
+ .flags = VMS_VARRAY | VMS_POINTER | VMS_ALLOC, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -560,7 +542,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.info = &(_info), \
.size = sizeof(_type), \
- .flags = VMS_VARRAY_UINT32|VMS_POINTER|VMS_ALLOC, \
+ .flags = VMS_VARRAY | VMS_POINTER | VMS_ALLOC, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -570,7 +552,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.info = &(_info), \
.size = sizeof(_type), \
- .flags = VMS_VARRAY_UINT16 | VMS_POINTER | VMS_ALLOC, \
+ .flags = VMS_VARRAY | VMS_POINTER | VMS_ALLOC, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -580,7 +562,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.info = &(_info), \
.size = sizeof(_type), \
- .flags = VMS_VARRAY_UINT16, \
+ .flags = VMS_VARRAY, \
.offset = vmstate_offset_varray(_state, _field, _type), \
}
@@ -659,7 +641,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.vmsd = &(_vmsd), \
.size = sizeof(_type), \
- .flags = VMS_POINTER | VMS_VARRAY_UINT8 | \
+ .flags = VMS_POINTER | VMS_VARRAY | \
VMS_ARRAY_OF_POINTER | VMS_STRUCT | \
VMS_ARRAY_OF_POINTER_AUTO_ALLOC, \
.offset = vmstate_offset_pointer(_state, _field, _type *), \
@@ -672,7 +654,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.vmsd = &(_vmsd), \
.size = sizeof(_type), \
- .flags = VMS_POINTER | VMS_VARRAY_UINT32 | \
+ .flags = VMS_POINTER | VMS_VARRAY | \
VMS_ARRAY_OF_POINTER | VMS_STRUCT | \
VMS_ARRAY_OF_POINTER_AUTO_ALLOC, \
.offset = vmstate_offset_pointer(_state, _field, _type *), \
@@ -683,7 +665,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.version_id = (_version), \
.num_indirect = vmstate_field_offset(_state, _field_num), \
.info = &(_info), \
- .flags = VMS_VARRAY_UINT32 | VMS_ARRAY_OF_POINTER | VMS_POINTER, \
+ .flags = VMS_VARRAY | VMS_ARRAY_OF_POINTER | VMS_POINTER, \
.offset = vmstate_offset_pointer(_state, _field, _type *), \
}
@@ -727,7 +709,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.version_id = (_version), \
.vmsd = &(_vmsd), \
.size = sizeof(_type), \
- .flags = VMS_STRUCT|VMS_VARRAY_UINT8, \
+ .flags = VMS_STRUCT | VMS_VARRAY, \
.offset = vmstate_offset_varray(_state, _field, _type), \
}
@@ -750,7 +732,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.size = sizeof(_type), \
.vmsd = &(_vmsd), \
- .flags = VMS_POINTER | VMS_VARRAY_INT32 | VMS_STRUCT, \
+ .flags = VMS_POINTER | VMS_VARRAY | VMS_STRUCT, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -760,7 +742,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.size = sizeof(_type), \
.vmsd = &(_vmsd), \
- .flags = VMS_POINTER | VMS_VARRAY_INT32 | VMS_STRUCT, \
+ .flags = VMS_POINTER | VMS_VARRAY | VMS_STRUCT, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -770,7 +752,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.num_indirect = vmstate_field_offset(_state, _field_num), \
.size = sizeof(_type), \
.vmsd = &(_vmsd), \
- .flags = VMS_POINTER | VMS_VARRAY_UINT16 | VMS_STRUCT, \
+ .flags = VMS_POINTER | VMS_VARRAY | VMS_STRUCT, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -780,7 +762,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.version_id = (_version), \
.vmsd = &(_vmsd), \
.size = sizeof(_type), \
- .flags = VMS_STRUCT|VMS_VARRAY_UINT32, \
+ .flags = VMS_STRUCT | VMS_VARRAY, \
.offset = vmstate_offset_varray(_state, _field, _type), \
}
@@ -790,7 +772,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.vmsd = &(_vmsd), \
.num_indirect = vmstate_field_offset(_state, _field_num), \
.size = sizeof(_type), \
- .flags = VMS_STRUCT|VMS_VARRAY_INT32|VMS_ALLOC|VMS_POINTER, \
+ .flags = VMS_STRUCT | VMS_VARRAY | VMS_ALLOC | VMS_POINTER, \
.offset = vmstate_offset_pointer(_state, _field, _type), \
}
@@ -915,7 +897,7 @@ extern const VMStateInfo vmstate_info_g_byte_array;
.version_id = (_version), \
.size = (_size), \
.info = &vmstate_info_unused_buffer, \
- .flags = VMS_VARRAY_UINT32 | VMS_BUFFER, \
+ .flags = VMS_VARRAY | VMS_BUFFER, \
}
/* _field_size should be a int32_t field in the _state struct giving the
diff --git a/migration/savevm.c b/migration/savevm.c
index 16b049c453..ba705c941a 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -884,11 +884,9 @@ static void vmstate_check(const VMStateDescription *vmsd)
}
/*
* VMS_ARRAY_OF_POINTER must be used only together with one
- * of VMS_(V)ARRAY* flags.
+ * of VMS_(V)ARRAY flags.
*/
- assert(field->flags & (VMS_ARRAY | VMS_VARRAY_INT32 |
- VMS_VARRAY_UINT16 | VMS_VARRAY_UINT8 |
- VMS_VARRAY_UINT32));
+ assert(field->flags & (VMS_ARRAY | VMS_VARRAY));
}
if (field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC) {
diff --git a/migration/vmstate.c b/migration/vmstate.c
index 9f49abda24..9556030f89 100644
--- a/migration/vmstate.c
+++ b/migration/vmstate.c
@@ -114,8 +114,7 @@ static uint64_t vmstate_n_elems(void *opaque, const VMStateField *field)
if (field->flags & VMS_ARRAY) {
n_elems = field->num;
- } else if (field->flags & (VMS_VARRAY_INT32 | VMS_VARRAY_UINT32
- | VMS_VARRAY_UINT16 | VMS_VARRAY_UINT8)) {
+ } else if (field->flags & VMS_VARRAY) {
n_elems = vmstate_read_from_offset(&field->num_indirect, opaque);
}
diff --git a/rust/bindings/migration-sys/lib.rs b/rust/bindings/migration-sys/lib.rs
index baa2730ca9..c8397dc897 100644
--- a/rust/bindings/migration-sys/lib.rs
+++ b/rust/bindings/migration-sys/lib.rs
@@ -57,12 +57,7 @@ pub trait VMStateFlagsExt {
}
impl VMStateFlagsExt for VMStateFlags {
- const VMS_VARRAY_FLAGS: VMStateFlags = VMStateFlags(
- VMStateFlags::VMS_VARRAY_INT32.0
- | VMStateFlags::VMS_VARRAY_UINT8.0
- | VMStateFlags::VMS_VARRAY_UINT16.0
- | VMStateFlags::VMS_VARRAY_UINT32.0,
- );
+ const VMS_VARRAY_FLAGS: VMStateFlags = VMStateFlags(VMStateFlags::VMS_VARRAY.0);
}
// Add a couple builder-style methods to VMStateField, allowing
diff --git a/rust/migration/src/vmstate.rs b/rust/migration/src/vmstate.rs
index 48d0065139..45c0b52738 100644
--- a/rust/migration/src/vmstate.rs
+++ b/rust/migration/src/vmstate.rs
@@ -250,9 +250,9 @@ unsafe impl $crate::vmstate::VMState for $type {
impl_vmstate_scalar!(vmstate_info_int16, i16);
impl_vmstate_scalar!(vmstate_info_int32, i32);
impl_vmstate_scalar!(vmstate_info_int64, i64);
-impl_vmstate_scalar!(vmstate_info_uint8, u8, VMS_VARRAY_UINT8);
-impl_vmstate_scalar!(vmstate_info_uint16, u16, VMS_VARRAY_UINT16);
-impl_vmstate_scalar!(vmstate_info_uint32, u32, VMS_VARRAY_UINT32);
+impl_vmstate_scalar!(vmstate_info_uint8, u8, VMS_VARRAY);
+impl_vmstate_scalar!(vmstate_info_uint16, u16, VMS_VARRAY);
+impl_vmstate_scalar!(vmstate_info_uint32, u32, VMS_VARRAY);
impl_vmstate_scalar!(vmstate_info_uint64, u64);
impl_vmstate_scalar!(vmstate_info_timer, util::timer::Timer);
diff --git a/rust/tests/tests/vmstate_tests.rs b/rust/tests/tests/vmstate_tests.rs
index c002ffb2bc..5f6dd8ae7f 100644
--- a/rust/tests/tests/vmstate_tests.rs
+++ b/rust/tests/tests/vmstate_tests.rs
@@ -113,7 +113,7 @@ fn test_vmstate_varray_uint16_unsafe() {
assert_eq!(foo_fields[2].version_id, 0);
assert_eq!(foo_fields[2].size, 1);
assert_eq!(foo_fields[2].num, 0);
- assert_eq!(foo_fields[2].flags, VMStateFlags::VMS_VARRAY_UINT16);
+ assert_eq!(foo_fields[2].flags, VMStateFlags::VMS_VARRAY);
assert!(foo_fields[2].vmsd.is_null());
assert!(foo_fields[2].field_exists.is_none());
}
@@ -222,7 +222,7 @@ fn test_vmstate_struct_varray_uint8() {
assert_eq!(foo_fields[2].num, 0);
assert_eq!(
foo_fields[2].flags.0,
- VMStateFlags::VMS_STRUCT.0 | VMStateFlags::VMS_VARRAY_UINT8.0
+ VMStateFlags::VMS_STRUCT.0 | VMStateFlags::VMS_VARRAY.0
);
assert_eq!(foo_fields[2].vmsd, VMSTATE_FOOA.as_ref());
assert!(foo_fields[2].field_exists.is_none());