Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

rust: gem: Introduce DriverObject::Args

This is an associated type that may be used in order to specify a
data-type to pass to gem objects when constructing them, allowing for
drivers to more easily initialize their private-data for gem objects.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>
Reviewed-by: Janne Grunau <j@jananu.net>
Tested-by: Deborah Brouwer <deborah.brouwer@collabora.com>
Link: https://patch.msgid.link/20260316211646.650074-5-lyude@redhat.com
[ Resolve merge conflicts in Tyr. - Danilo ]
Signed-off-by: Danilo Krummrich <dakr@kernel.org>

authored by

Lyude Paul and committed by
Danilo Krummrich
442ba16a e64b9cc2

+15 -6
+3 -2
drivers/gpu/drm/nova/gem.rs
··· 19 19 20 20 impl gem::DriverObject for NovaObject { 21 21 type Driver = NovaDriver; 22 + type Args = (); 22 23 23 - fn new(_dev: &NovaDevice, _size: usize) -> impl PinInit<Self, Error> { 24 + fn new(_dev: &NovaDevice, _size: usize, _args: Self::Args) -> impl PinInit<Self, Error> { 24 25 try_pin_init!(NovaObject {}) 25 26 } 26 27 } ··· 34 33 } 35 34 let aligned_size = page::page_align(size).ok_or(EINVAL)?; 36 35 37 - gem::Object::new(dev, aligned_size) 36 + gem::Object::new(dev, aligned_size, ()) 38 37 } 39 38 40 39 /// Look up a GEM object handle for a `File` and return an `ObjectRef` for it.
+2 -1
drivers/gpu/drm/tyr/gem.rs
··· 16 16 17 17 impl gem::DriverObject for TyrObject { 18 18 type Driver = TyrDrmDriver; 19 + type Args = (); 19 20 20 - fn new(_dev: &TyrDrmDevice, _size: usize) -> impl PinInit<Self, Error> { 21 + fn new(_dev: &TyrDrmDevice, _size: usize, _args: ()) -> impl PinInit<Self, Error> { 21 22 try_pin_init!(TyrObject {}) 22 23 } 23 24 }
+10 -3
rust/kernel/drm/gem/mod.rs
··· 73 73 /// Parent `Driver` for this object. 74 74 type Driver: drm::Driver; 75 75 76 + /// The data type to use for passing arguments to [`DriverObject::new`]. 77 + type Args; 78 + 76 79 /// Create a new driver data object for a GEM object of a given size. 77 - fn new(dev: &drm::Device<Self::Driver>, size: usize) -> impl PinInit<Self, Error>; 80 + fn new( 81 + dev: &drm::Device<Self::Driver>, 82 + size: usize, 83 + args: Self::Args, 84 + ) -> impl PinInit<Self, Error>; 78 85 79 86 /// Open a new handle to an existing object, associated with a File. 80 87 fn open(_obj: &<Self::Driver as drm::Driver>::Object, _file: &DriverFile<Self>) -> Result { ··· 248 241 }; 249 242 250 243 /// Create a new GEM object. 251 - pub fn new(dev: &drm::Device<T::Driver>, size: usize) -> Result<ARef<Self>> { 244 + pub fn new(dev: &drm::Device<T::Driver>, size: usize, args: T::Args) -> Result<ARef<Self>> { 252 245 let obj: Pin<KBox<Self>> = KBox::pin_init( 253 246 try_pin_init!(Self { 254 247 obj: Opaque::new(bindings::drm_gem_object::default()), 255 - data <- T::new(dev, size), 248 + data <- T::new(dev, size, args), 256 249 }), 257 250 GFP_KERNEL, 258 251 )?;