rust: move VMState handling to QOM module
This will allow to split vmstate to a standalone crate next. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Link: https://lore.kernel.org/r/20250827104147.717203-9-marcandre.lureau@redhat.com Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
88cf78e917
commit
0611dd418a
2 changed files with 8 additions and 6 deletions
|
|
@ -109,6 +109,7 @@ use crate::{
|
|||
object_get_typename, object_new, object_ref, object_unref, TypeInfo,
|
||||
},
|
||||
cell::{bql_locked, Opaque},
|
||||
impl_vmstate_pointer,
|
||||
};
|
||||
|
||||
/// A safe wrapper around [`bindings::Object`].
|
||||
|
|
@ -948,3 +949,5 @@ where
|
|||
|
||||
impl<T> ObjectClassMethods for T where T: IsA<Object> {}
|
||||
impl<R: ObjectDeref> ObjectMethods for R where R::Target: IsA<Object> {}
|
||||
|
||||
impl_vmstate_pointer!(Owned<T> where T: VMState + ObjectType);
|
||||
|
|
|
|||
|
|
@ -40,8 +40,6 @@ use crate::{
|
|||
bindings::{self, VMStateFlags},
|
||||
callbacks::FnCall,
|
||||
errno::{into_neg_errno, Errno},
|
||||
prelude::*,
|
||||
qom::Owned,
|
||||
zeroable::Zeroable,
|
||||
};
|
||||
|
||||
|
|
@ -128,7 +126,8 @@ pub const fn vmstate_varray_flag<T: VMState>(_: PhantomData<T>) -> VMStateFlags
|
|||
/// * a transparent wrapper for any of the above (`Cell`, `UnsafeCell`,
|
||||
/// [`BqlCell`], [`BqlRefCell`]
|
||||
/// * a raw pointer to any of the above
|
||||
/// * a `NonNull` pointer, a `Box` or an [`Owned`] for any of the above
|
||||
/// * a `NonNull` pointer, a `Box` or an [`Owned`](crate::qom::Owned) for any of
|
||||
/// the above
|
||||
/// * an array of any of the above
|
||||
///
|
||||
/// In order to support other types, the trait `VMState` must be implemented
|
||||
|
|
@ -335,10 +334,11 @@ macro_rules! impl_vmstate_c_struct {
|
|||
// Note that references are not supported, though references to cells
|
||||
// could be allowed.
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_vmstate_pointer {
|
||||
($type:ty where $base:tt: VMState $($where:tt)*) => {
|
||||
unsafe impl<$base> VMState for $type where $base: VMState $($where)* {
|
||||
const BASE: VMStateField = <$base as VMState>::BASE.with_pointer_flag();
|
||||
unsafe impl<$base> $crate::vmstate::VMState for $type where $base: $crate::vmstate::VMState $($where)* {
|
||||
const BASE: $crate::vmstate::VMStateField = <$base as $crate::vmstate::VMState>::BASE.with_pointer_flag();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -350,7 +350,6 @@ impl_vmstate_pointer!(NonNull<T> where T: VMState);
|
|||
// Unlike C pointers, Box is always non-null therefore there is no need
|
||||
// to specify VMS_ALLOC.
|
||||
impl_vmstate_pointer!(Box<T> where T: VMState);
|
||||
impl_vmstate_pointer!(Owned<T> where T: VMState + ObjectType);
|
||||
|
||||
// Arrays using the underlying type's VMState plus
|
||||
// VMS_ARRAY/VMS_ARRAY_OF_POINTER
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue