Message ID | 20250317151236.536673-13-zhao1.liu@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | rust/vmstate: Clean up, fix, enhance & test | expand |
On Mon, Mar 17, 2025 at 3:52 PM Zhao Liu <zhao1.liu@intel.com> wrote: > Add "version = *" in vmstate macros to help set version_id in > VMStateField. Could it use a ".with_min_version(2)" annotation (or something similar) instead? Paolo > Signed-off-by: Zhao Liu <zhao1.liu@intel.com> > --- > rust/qemu-api/src/vmstate.rs | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs > index 3d4c50ca86f9..bb41bfd291c0 100644 > --- a/rust/qemu-api/src/vmstate.rs > +++ b/rust/qemu-api/src/vmstate.rs > @@ -197,7 +197,7 @@ pub const fn vmstate_varray_flag<T: VMState>(_: PhantomData<T>) -> VMStateFlags > /// and [`impl_vmstate_forward!`](crate::impl_vmstate_forward) help with this. > #[macro_export] > macro_rules! vmstate_of { > - ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $(* $factor:expr)?])? $(,)?) => { > + ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $(* $factor:expr)?])? $(, version = $version:expr)? $(,)?) => { > $crate::bindings::VMStateField { > name: ::core::concat!(::core::stringify!($field_name), "\0") > .as_bytes() > @@ -211,6 +211,7 @@ macro_rules! vmstate_of { > $struct_name, > $field_name > )), > + $(version_id: $version,)? > ..$crate::call_func_with_field!( > $crate::vmstate::vmstate_base, > $struct_name, > @@ -442,7 +443,7 @@ macro_rules! vmstate_unused { > #[doc(alias = "VMSTATE_STRUCT")] > #[macro_export] > macro_rules! vmstate_struct { > - ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $(* $factor:expr)?])?, $vmsd:ident, $type:ty $(,)?) => { > + ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $( * $factor:expr)? ])?, $vmsd:ident, $type:ty $(, version = $version:expr)? $(,)?) => { > $crate::bindings::VMStateField { > name: ::core::concat!(::core::stringify!($field_name), "\0") > .as_bytes() > @@ -455,6 +456,7 @@ macro_rules! vmstate_struct { > size: ::core::mem::size_of::<$type>(), > flags: $crate::bindings::VMStateFlags::VMS_STRUCT, > vmsd: &$vmsd, > + $(version_id: $version,)? > ..$crate::zeroable::Zeroable::ZERO > } $(.with_varray_flag_unchecked( > $crate::call_func_with_field!( > -- > 2.34.1 >
On Mon, Mar 17, 2025 at 05:38:10PM +0100, Paolo Bonzini wrote: > Date: Mon, 17 Mar 2025 17:38:10 +0100 > From: Paolo Bonzini <pbonzini@redhat.com> > Subject: Re: [PATCH 12/17] rust/vmstate: Support version field in vmstate > macros > > On Mon, Mar 17, 2025 at 3:52 PM Zhao Liu <zhao1.liu@intel.com> wrote: > > Add "version = *" in vmstate macros to help set version_id in > > VMStateField. > > Could it use a ".with_min_version(2)" annotation (or something similar) instead? > Ah, thanks! I didn't realize there was already a with_version_id() and didn't understand your design intent, so vmstate_of!(FooC, ptr).with_version_id(2), would have been good enough! There is no need to add this `version` field. Regards, Zhao
diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 3d4c50ca86f9..bb41bfd291c0 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -197,7 +197,7 @@ pub const fn vmstate_varray_flag<T: VMState>(_: PhantomData<T>) -> VMStateFlags /// and [`impl_vmstate_forward!`](crate::impl_vmstate_forward) help with this. #[macro_export] macro_rules! vmstate_of { - ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $(* $factor:expr)?])? $(,)?) => { + ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $(* $factor:expr)?])? $(, version = $version:expr)? $(,)?) => { $crate::bindings::VMStateField { name: ::core::concat!(::core::stringify!($field_name), "\0") .as_bytes() @@ -211,6 +211,7 @@ macro_rules! vmstate_of { $struct_name, $field_name )), + $(version_id: $version,)? ..$crate::call_func_with_field!( $crate::vmstate::vmstate_base, $struct_name, @@ -442,7 +443,7 @@ macro_rules! vmstate_unused { #[doc(alias = "VMSTATE_STRUCT")] #[macro_export] macro_rules! vmstate_struct { - ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $(* $factor:expr)?])?, $vmsd:ident, $type:ty $(,)?) => { + ($struct_name:ty, $field_name:ident $(, [0 .. $num:ident $( * $factor:expr)? ])?, $vmsd:ident, $type:ty $(, version = $version:expr)? $(,)?) => { $crate::bindings::VMStateField { name: ::core::concat!(::core::stringify!($field_name), "\0") .as_bytes() @@ -455,6 +456,7 @@ macro_rules! vmstate_struct { size: ::core::mem::size_of::<$type>(), flags: $crate::bindings::VMStateFlags::VMS_STRUCT, vmsd: &$vmsd, + $(version_id: $version,)? ..$crate::zeroable::Zeroable::ZERO } $(.with_varray_flag_unchecked( $crate::call_func_with_field!(
Add "version = *" in vmstate macros to help set version_id in VMStateField. Signed-off-by: Zhao Liu <zhao1.liu@intel.com> --- rust/qemu-api/src/vmstate.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)