Hi Lyude, > On 1 May 2025, at 15:33, Lyude Paul <ly...@redhat.com> wrote: > > There's a few changes here: > * The rename, of course (this should also let us drop the clippy annotation > here) > * Return *mut bindings::drm_gem_object instead of > &Opaque<bindings::drm_gem_object> - the latter doesn't really have any > benefit and just results in conversion from the rust type to the C type > having to be more verbose than necessary. > > Signed-off-by: Lyude Paul <ly...@redhat.com> > --- > rust/kernel/drm/gem/mod.rs | 21 +++++++-------------- > 1 file changed, 7 insertions(+), 14 deletions(-) > > diff --git a/rust/kernel/drm/gem/mod.rs b/rust/kernel/drm/gem/mod.rs > index f70531889c21f..55b2f1d056c39 100644 > --- a/rust/kernel/drm/gem/mod.rs > +++ b/rust/kernel/drm/gem/mod.rs > @@ -42,8 +42,7 @@ pub trait IntoGEMObject: Sized + super::private::Sealed { > > /// Returns a reference to the raw `drm_gem_object` structure, which must > be valid as long as > /// this owning object is valid. > - #[allow(clippy::wrong_self_convention)] > - fn into_gem_obj(&self) -> &Opaque<bindings::drm_gem_object>; > + fn as_gem_obj(&self) -> *mut bindings::drm_gem_object; > > /// Converts a pointer to a `struct drm_gem_object` into a reference to > `Self`. > /// > @@ -99,8 +98,8 @@ extern "C" fn close_callback<T: BaseDriverObject<U>, U: > BaseObject>( > impl<T: DriverObject> IntoGEMObject for Object<T> { > type Driver = T::Driver; > > - fn into_gem_obj(&self) -> &Opaque<bindings::drm_gem_object> { > - &self.obj > + fn as_gem_obj(&self) -> *mut bindings::drm_gem_object { > + self.obj.get() > } > > unsafe fn as_ref<'a>(self_ptr: *mut bindings::drm_gem_object) -> &'a Self > { > @@ -119,7 +118,7 @@ pub trait BaseObject > fn size(&self) -> usize { > // SAFETY: `self.into_gem_obj()` is guaranteed to be a pointer to a > valid `struct > // drm_gem_object`. > - unsafe { (*self.into_gem_obj().get()).size } > + unsafe { (*self.as_gem_obj()).size } > } > > /// Creates a new handle for the object associated with a given `File` > @@ -131,11 +130,7 @@ fn create_handle( > let mut handle: u32 = 0; > // SAFETY: The arguments are all valid per the type invariants. > to_result(unsafe { > - bindings::drm_gem_handle_create( > - file.as_raw().cast(), > - self.into_gem_obj().get(), > - &mut handle, > - ) > + bindings::drm_gem_handle_create(file.as_raw().cast(), > self.as_gem_obj(), &mut handle) > })?; > Ok(handle) > } > @@ -171,13 +166,11 @@ fn lookup_handle( > /// Creates an mmap offset to map the object from userspace. > fn create_mmap_offset(&self) -> Result<u64> { > // SAFETY: The arguments are valid per the type invariant. > - to_result(unsafe { > bindings::drm_gem_create_mmap_offset(self.into_gem_obj().get()) })?; > + to_result(unsafe { > bindings::drm_gem_create_mmap_offset(self.as_gem_obj()) })?; > > // SAFETY: The arguments are valid per the type invariant. > Ok(unsafe { > - bindings::drm_vma_node_offset_addr(ptr::addr_of_mut!( > - (*self.into_gem_obj().get()).vma_node > - )) > + > bindings::drm_vma_node_offset_addr(ptr::addr_of_mut!((*self.as_gem_obj()).vma_node))
Hmm, I thought we were on a quest to remove addr_of_mut!() in favor of &raw mut? Anyways, this is again orthogonal to your patch. > }) > } > } > -- > 2.48.1 > > This looks good. Reviewed-by: Daniel Almeida <daniel.alme...@collabora.com>