[RFC PATCH 3/4] rust: drm: expose drm::Device::as_raw()

From: Mike Lothian

Date: Wed Jun 17 2026 - 11:18:01 EST


A KMS driver built on the minimal bindings added earlier in this series
needs the raw `struct drm_device` pointer to hand to the C KMS helpers
(drm_simple_display_pipe_init, drm_connector_init, the drm_atomic_helper_*
family, …) until safe Rust KMS abstractions cover them.

Make drm::Device::as_raw() pub, documented as a temporary escape hatch
with the caller's locking/lifetime obligations spelled out. This is the
part of the KMS work most likely to draw objections, so it is split into
its own patch: it can be dropped or reworked (e.g. replaced by narrow safe
wrappers, or kept pub(crate) behind per-helper methods) without disturbing
the feature flags and header bindings, which are useful on their own.

Signed-off-by: Mike Lothian <mike@xxxxxxxxxxxxxx>
Assisted-by: Claude:claude-opus-4-8 [Claude-Code]
---
rust/kernel/drm/device.rs | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/rust/kernel/drm/device.rs b/rust/kernel/drm/device.rs
index 1d3319b713e2..c89c947b399a 100644
--- a/rust/kernel/drm/device.rs
+++ b/rust/kernel/drm/device.rs
@@ -296,7 +296,15 @@ pub struct Device<T: drm::Driver, C: DeviceContext = Registered> {
}

impl<T: drm::Driver, C: DeviceContext> Device<T, C> {
- pub(crate) fn as_raw(&self) -> *mut bindings::drm_device {
+ /// Returns a raw pointer to the underlying `struct drm_device`.
+ ///
+ /// This is a temporary escape hatch for drivers that need to call C KMS helpers
+ /// not yet covered by safe Rust abstractions; it is expected to be removed (or
+ /// narrowed to `pub(crate)`) once the in-progress safe KMS layer can express
+ /// those operations. The returned pointer is valid for as long as `self` is
+ /// borrowed; the caller must uphold the locking and lifetime rules of every C
+ /// function it is passed to.
+ pub fn as_raw(&self) -> *mut bindings::drm_device {
self.dev.get()
}

--
2.54.0