qemu-rust
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 11/15] rust: qdev: wrap Clock and DeviceState with Opaque<>


From: Zhao Liu
Subject: Re: [PATCH 11/15] rust: qdev: wrap Clock and DeviceState with Opaque<>
Date: Tue, 25 Feb 2025 16:52:13 +0800

> -unsafe extern "C" fn rust_realize_fn<T: DeviceImpl>(dev: *mut DeviceState, 
> _errp: *mut *mut Error) {
> +unsafe extern "C" fn rust_realize_fn<T: DeviceImpl>(
> +    dev: *mut bindings::DeviceState,
> +    _errp: *mut *mut Error,
> +) {
>      let state = NonNull::new(dev).unwrap().cast::<T>();
>      T::REALIZE.unwrap()(unsafe { state.as_ref() });
>  }
> @@ -251,7 +270,7 @@ fn init_clock_in<F: for<'a> FnCall<(&'a Self::Target, 
> ClockEvent)>>(
>          events: ClockEvent,
>      ) -> Owned<Clock> {
>          fn do_init_clock_in(
> -            dev: *mut DeviceState,
> +            dev: &DeviceState,
>              name: &str,
>              cb: Option<unsafe extern "C" fn(*mut c_void, ClockEvent)>,
>              events: ClockEvent,
> @@ -265,14 +284,15 @@ fn do_init_clock_in(
>              unsafe {
>                  let cstr = CString::new(name).unwrap();
>                  let clk = bindings::qdev_init_clock_in(
> -                    dev,
> +                    dev.0.as_mut_ptr(),

This can be simplfied as dev.as_mut_ptr().

>                      cstr.as_ptr(),
>                      cb,
> -                    dev.cast::<c_void>(),
> +                    dev.0.as_void_ptr(),

If Wrapper provides as_void_ptr(), then this can also be simplified.

>                      events.0,
>                  );
>  
> -                Owned::from(&*clk)
> +                let clk: &Clock = Clock::from_raw(clk);
> +                Owned::from(clk)
>              }
>          }

LGTM,

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]