> impl MemoryRegion {
> // inline to ensure that it is not included in tests, which only
> @@ -174,13 +174,15 @@ pub fn init_io<T: IsA<Object>>(
> size: u64,
> ) {
> unsafe {
> - Self::do_init_io(&mut self.inner, owner.cast::<Object>(),
> &ops.0, name, size);
> + Self::do_init_io(
> + self.0.as_mut_ptr(),
I'm not sure why the wrapper doesn't work here.
If I change this to `self.as_mut_ptr()`, then compiler tries to apply
`ObjectDeref::as_mut_ptr` and complains:
the trait `qom::ObjectType` is not implemented for `bindings::MemoryRegion`
But when I modify the function signature to &self like:
diff --git a/rust/qemu-api/src/memory.rs b/rust/qemu-api/src/memory.rs
index fdb1ea11fcf9..a82348c4a564 100644
--- a/rust/qemu-api/src/memory.rs
+++ b/rust/qemu-api/src/memory.rs
@@ -167,7 +167,7 @@ unsafe fn do_init_io(
}
pub fn init_io<T: IsA<Object>>(
- &mut self,
+ &self,
owner: *mut T,
ops: &'static MemoryRegionOps<T>,
name: &'static str,
Then the Wrapper's as_mut_ptr() can work.
> + owner.cast::<Object>(),
> + &ops.0,
> + name,
> + size,
> + );
> }
> }
> -
> - pub(crate) const fn as_mut_ptr(&self) -> *mut bindings::MemoryRegion {
> - addr_of!(self.inner) as *mut _
> - }
> }
>
> unsafe impl ObjectType for MemoryRegion {
> --
> 2.48.1
>
>