* [PATCH] rust: drm/gem: Remove Object.dev
@ 2025-10-16 20:18 Lyude Paul
2025-10-16 21:17 ` Danilo Krummrich
2025-10-17 13:10 ` Alice Ryhl
0 siblings, 2 replies; 3+ messages in thread
From: Lyude Paul @ 2025-10-16 20:18 UTC (permalink / raw)
To: linux-kernel, rust-for-linux, dri-devel
Cc: Danilo Krummrich, Alice Ryhl, David Airlie, Simona Vetter,
Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Trevor Gross, Daniel Almeida, Asahi Lina, Shankari Anand
I noticed by chance that there's actually already a pointer to this in
struct drm_gem_object. So, no use in carrying this around!
Signed-off-by: Lyude Paul <lyude@redhat.com>
---
rust/kernel/drm/gem/mod.rs | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/rust/kernel/drm/gem/mod.rs b/rust/kernel/drm/gem/mod.rs
index 30c853988b942..28d929edae267 100644
--- a/rust/kernel/drm/gem/mod.rs
+++ b/rust/kernel/drm/gem/mod.rs
@@ -187,12 +187,10 @@ impl<T: IntoGEMObject> BaseObject for T {}
/// Invariants
///
/// - `self.obj` is a valid instance of a `struct drm_gem_object`.
-/// - `self.dev` is always a valid pointer to a `struct drm_device`.
#[repr(C)]
#[pin_data]
pub struct Object<T: DriverObject + Send + Sync> {
obj: Opaque<bindings::drm_gem_object>,
- dev: NonNull<drm::Device<T::Driver>>,
#[pin]
data: T,
}
@@ -222,9 +220,6 @@ pub fn new(dev: &drm::Device<T::Driver>, size: usize) -> Result<ARef<Self>> {
try_pin_init!(Self {
obj: Opaque::new(bindings::drm_gem_object::default()),
data <- T::new(dev, size),
- // INVARIANT: The drm subsystem guarantees that the `struct drm_device` will live
- // as long as the GEM object lives.
- dev: dev.into(),
}),
GFP_KERNEL,
)?;
@@ -247,9 +242,9 @@ pub fn new(dev: &drm::Device<T::Driver>, size: usize) -> Result<ARef<Self>> {
/// Returns the `Device` that owns this GEM object.
pub fn dev(&self) -> &drm::Device<T::Driver> {
- // SAFETY: The DRM subsystem guarantees that the `struct drm_device` will live as long as
- // the GEM object lives, hence the pointer must be valid.
- unsafe { self.dev.as_ref() }
+ // SAFETY: `struct drm_gem_object.dev` is initialized and valid for as long as the GEM
+ // object lives.
+ unsafe { drm::Device::from_raw((*self.as_raw()).dev) }
}
fn as_raw(&self) -> *mut bindings::drm_gem_object {
base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
--
2.51.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] rust: drm/gem: Remove Object.dev
2025-10-16 20:18 [PATCH] rust: drm/gem: Remove Object.dev Lyude Paul
@ 2025-10-16 21:17 ` Danilo Krummrich
2025-10-17 13:10 ` Alice Ryhl
1 sibling, 0 replies; 3+ messages in thread
From: Danilo Krummrich @ 2025-10-16 21:17 UTC (permalink / raw)
To: Lyude Paul
Cc: linux-kernel, rust-for-linux, dri-devel, Alice Ryhl, David Airlie,
Simona Vetter, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Trevor Gross, Daniel Almeida, Asahi Lina, Shankari Anand
On 10/16/25 10:18 PM, Lyude Paul wrote:
> I noticed by chance that there's actually already a pointer to this in
> struct drm_gem_object. So, no use in carrying this around!
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
Acked-by: Danilo Krummrich <dakr@kernel.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] rust: drm/gem: Remove Object.dev
2025-10-16 20:18 [PATCH] rust: drm/gem: Remove Object.dev Lyude Paul
2025-10-16 21:17 ` Danilo Krummrich
@ 2025-10-17 13:10 ` Alice Ryhl
1 sibling, 0 replies; 3+ messages in thread
From: Alice Ryhl @ 2025-10-17 13:10 UTC (permalink / raw)
To: Lyude Paul
Cc: linux-kernel, rust-for-linux, dri-devel, Danilo Krummrich,
David Airlie, Simona Vetter, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Trevor Gross, Daniel Almeida, Asahi Lina,
Shankari Anand
On Thu, Oct 16, 2025 at 04:18:58PM -0400, Lyude Paul wrote:
> I noticed by chance that there's actually already a pointer to this in
> struct drm_gem_object. So, no use in carrying this around!
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> rust/kernel/drm/gem/mod.rs | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/rust/kernel/drm/gem/mod.rs b/rust/kernel/drm/gem/mod.rs
> index 30c853988b942..28d929edae267 100644
> --- a/rust/kernel/drm/gem/mod.rs
> +++ b/rust/kernel/drm/gem/mod.rs
> @@ -187,12 +187,10 @@ impl<T: IntoGEMObject> BaseObject for T {}
> /// Invariants
> ///
> /// - `self.obj` is a valid instance of a `struct drm_gem_object`.
> -/// - `self.dev` is always a valid pointer to a `struct drm_device`.
> #[repr(C)]
> #[pin_data]
> pub struct Object<T: DriverObject + Send + Sync> {
> obj: Opaque<bindings::drm_gem_object>,
> - dev: NonNull<drm::Device<T::Driver>>,
> #[pin]
> data: T,
> }
> @@ -222,9 +220,6 @@ pub fn new(dev: &drm::Device<T::Driver>, size: usize) -> Result<ARef<Self>> {
> try_pin_init!(Self {
> obj: Opaque::new(bindings::drm_gem_object::default()),
> data <- T::new(dev, size),
> - // INVARIANT: The drm subsystem guarantees that the `struct drm_device` will live
> - // as long as the GEM object lives.
> - dev: dev.into(),
> }),
> GFP_KERNEL,
> )?;
> @@ -247,9 +242,9 @@ pub fn new(dev: &drm::Device<T::Driver>, size: usize) -> Result<ARef<Self>> {
>
> /// Returns the `Device` that owns this GEM object.
> pub fn dev(&self) -> &drm::Device<T::Driver> {
> - // SAFETY: The DRM subsystem guarantees that the `struct drm_device` will live as long as
> - // the GEM object lives, hence the pointer must be valid.
> - unsafe { self.dev.as_ref() }
> + // SAFETY: `struct drm_gem_object.dev` is initialized and valid for as long as the GEM
> + // object lives.
> + unsafe { drm::Device::from_raw((*self.as_raw()).dev) }
The wording here and in the invariants could be improved to say that
T::Driver is the right choice for the generic parameter.
Alice
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-10-17 13:10 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-16 20:18 [PATCH] rust: drm/gem: Remove Object.dev Lyude Paul
2025-10-16 21:17 ` Danilo Krummrich
2025-10-17 13:10 ` Alice Ryhl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).