[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 13/15] rust: memory: wrap MemoryRegion with Opaque<>
From: |
Zhao Liu |
Subject: |
Re: [PATCH 13/15] rust: memory: wrap MemoryRegion with Opaque<> |
Date: |
Tue, 25 Feb 2025 17:14:10 +0800 |
> 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
>
>
- Re: [PATCH 09/15] rust: irq: wrap IRQState with Opaque<>, (continued)
[PATCH 10/15] rust: qom: wrap Object with Opaque<>, Paolo Bonzini, 2025/02/21
[PATCH 12/15] rust: sysbus: wrap SysBusDevice with Opaque<>, Paolo Bonzini, 2025/02/21
[PATCH 11/15] rust: qdev: wrap Clock and DeviceState with Opaque<>, Paolo Bonzini, 2025/02/21
[PATCH 13/15] rust: memory: wrap MemoryRegion with Opaque<>, Paolo Bonzini, 2025/02/21
- Re: [PATCH 13/15] rust: memory: wrap MemoryRegion with Opaque<>,
Zhao Liu <=
[PATCH 14/15] rust: chardev: wrap Chardev with Opaque<>, Paolo Bonzini, 2025/02/21
[PATCH 15/15] rust: bindings: remove more unnecessary Send/Sync impls, Paolo Bonzini, 2025/02/21