aboutsummaryrefslogtreecommitdiff
path: root/rust/qemu-api/src
diff options
context:
space:
mode:
authorZhao Liu <zhao1.liu@intel.com>2025-03-18 21:02:12 +0800
committerPaolo Bonzini <pbonzini@redhat.com>2025-03-21 12:56:00 +0100
commit5006e39cfacbf37e6925239059ae6945e36cf74e (patch)
tree65cb8c81221f89d40d630c8e77afdcf6acf342ae /rust/qemu-api/src
parente5655e92a8b984129aed12f24fc50d6e3f63429d (diff)
downloadqemu-5006e39cfacbf37e6925239059ae6945e36cf74e.zip
qemu-5006e39cfacbf37e6925239059ae6945e36cf74e.tar.gz
qemu-5006e39cfacbf37e6925239059ae6945e36cf74e.tar.bz2
rust/vmstate: Relax array check when build varray in vmstate_struct
The varry of structure created by vmstate_struct is different with vmstate_of. This is because vmstate_struct uses the `vmsd` to traverse the vmstates of structure's fields, rather than treating the structure directly as a well-defined vmstate. Therefore, there's no need to check array flag when building varray by vmstate_struct. Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Link: https://lore.kernel.org/r/20250318130219.1799170-9-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'rust/qemu-api/src')
-rw-r--r--rust/qemu-api/src/vmstate.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs
index 792a74f..0b5af1c 100644
--- a/rust/qemu-api/src/vmstate.rs
+++ b/rust/qemu-api/src/vmstate.rs
@@ -275,8 +275,7 @@ impl VMStateField {
}
#[must_use]
- pub const fn with_varray_flag(mut self, flag: VMStateFlags) -> VMStateField {
- assert!((self.flags.0 & VMStateFlags::VMS_ARRAY.0) != 0);
+ pub const fn with_varray_flag_unchecked(mut self, flag: VMStateFlags) -> VMStateField {
self.flags = VMStateFlags(self.flags.0 & !VMStateFlags::VMS_ARRAY.0);
self.flags = VMStateFlags(self.flags.0 | flag.0);
self.num = 0; // varray uses num_offset instead of num.
@@ -284,6 +283,13 @@ impl VMStateField {
}
#[must_use]
+ #[allow(unused_mut)]
+ pub const fn with_varray_flag(mut self, flag: VMStateFlags) -> VMStateField {
+ assert!((self.flags.0 & VMStateFlags::VMS_ARRAY.0) != 0);
+ self.with_varray_flag_unchecked(flag)
+ }
+
+ #[must_use]
pub const fn with_varray_multiply(mut self, num: u32) -> VMStateField {
assert!(num <= 0x7FFF_FFFFu32);
self.flags = VMStateFlags(self.flags.0 | VMStateFlags::VMS_MULTIPLY_ELEMENTS.0);
@@ -454,7 +460,7 @@ macro_rules! vmstate_struct {
flags: $crate::bindings::VMStateFlags::VMS_STRUCT,
vmsd: $vmsd,
..$crate::zeroable::Zeroable::ZERO
- } $(.with_varray_flag(
+ } $(.with_varray_flag_unchecked(
$crate::call_func_with_field!(
$crate::vmstate::vmstate_varray_flag,
$struct_name,