[PATCH 3/7] rust: drm: move file_operations from gem to device

From: Danilo Krummrich

Date: Fri Aug 14 2026 - 19:12:04 EST


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 <dakr@xxxxxxxxxx>
---
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