Move the file_operations definition from drm::gem::create_fops() into UnregisteredDevice in drm::device. This is the file_operations of the DRM minor device, set through the drm_driver struct. It is not specific to GEM.
Signed-off-by: Danilo Krummrich <[email protected]> --- rust/kernel/drm/device.rs | 22 ++++++++++++++++++++-- rust/kernel/drm/gem/mod.rs | 20 -------------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/rust/kernel/drm/device.rs b/rust/kernel/drm/device.rs index be83287fe161..a2940e172073 100644 --- a/rust/kernel/drm/device.rs +++ b/rust/kernel/drm/device.rs @@ -195,10 +195,28 @@ const fn compute_features() -> u32 { driver_features: Self::compute_features(), ioctls: T::IOCTLS.as_ptr(), num_ioctls: T::IOCTLS.len() as i32, - fops: &Self::GEM_FOPS, + fops: &Self::FOPS, }; - const GEM_FOPS: bindings::file_operations = drm::gem::create_fops(); + const FOPS: bindings::file_operations = { + let mut fops: bindings::file_operations = pin_init::zeroed(); + + fops.owner = core::ptr::null_mut(); + fops.open = Some(bindings::drm_open); + fops.release = Some(bindings::drm_release); + fops.unlocked_ioctl = Some(bindings::drm_ioctl); + #[cfg(CONFIG_COMPAT)] + { + fops.compat_ioctl = Some(bindings::drm_compat_ioctl); + } + fops.poll = Some(bindings::drm_poll); + fops.read = Some(bindings::drm_read); + fops.llseek = Some(bindings::noop_llseek); + fops.mmap = Some(bindings::drm_gem_mmap); + fops.fop_flags = bindings::FOP_UNSIGNED_OFFSET; + + fops + }; /// Create a new `UnregisteredDevice` for a `drm::Driver`. /// diff --git a/rust/kernel/drm/gem/mod.rs b/rust/kernel/drm/gem/mod.rs index 560403ca8e38..ee048febfbdc 100644 --- a/rust/kernel/drm/gem/mod.rs +++ b/rust/kernel/drm/gem/mod.rs @@ -399,23 +399,3 @@ impl<T: DriverObject, Ctx: DeviceContext> AllocImpl for Object<T, Ctx> { dumb_map_offset: None, }; } - -pub(super) const fn create_fops() -> bindings::file_operations { - let mut fops: bindings::file_operations = pin_init::zeroed(); - - fops.owner = core::ptr::null_mut(); - fops.open = Some(bindings::drm_open); - fops.release = Some(bindings::drm_release); - fops.unlocked_ioctl = Some(bindings::drm_ioctl); - #[cfg(CONFIG_COMPAT)] - { - fops.compat_ioctl = Some(bindings::drm_compat_ioctl); - } - fops.poll = Some(bindings::drm_poll); - fops.read = Some(bindings::drm_read); - fops.llseek = Some(bindings::noop_llseek); - fops.mmap = Some(bindings::drm_gem_mmap); - fops.fop_flags = bindings::FOP_UNSIGNED_OFFSET; - - fops -} -- 2.55.0
