summaryrefslogtreecommitdiff
path: root/rust/kernel/drm
diff options
context:
space:
mode:
authorDanilo Krummrich <dakr@kernel.org>2026-06-28 16:53:35 +0200
committerDanilo Krummrich <dakr@kernel.org>2026-07-12 16:01:06 +0200
commit453197b7cc320c5a7fc289bafff028bf6c550ceb (patch)
treec9503997870a4a99cebf7dc87f84958115402ecd /rust/kernel/drm
parent47f600d40bc6bf7bcc1f28f8c7fa3e3a7aa445eb (diff)
downloadlinux-next-453197b7cc320c5a7fc289bafff028bf6c550ceb.tar.gz
linux-next-453197b7cc320c5a7fc289bafff028bf6c550ceb.zip
rust: drm: add AsRef<ParentDevice<Bound>> for Device<Registered>
Implement AsRef<T::ParentDevice<Bound>> for Device<T, Registered>, providing access to the bound parent bus device for registered DRM devices. Since a Device<T, Registered> guarantees that the parent bus device is bound, the conversion to T::ParentDevice<Bound> is safe. Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Tested-by: Deborah Brouwer <deborah.brouwer@collabora.com> Link: https://patch.msgid.link/20260628145406.2107056-16-dakr@kernel.org Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Diffstat (limited to 'rust/kernel/drm')
-rw-r--r--rust/kernel/drm/device.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/rust/kernel/drm/device.rs b/rust/kernel/drm/device.rs
index d4521ef8ed80..fb3724c09f27 100644
--- a/rust/kernel/drm/device.rs
+++ b/rust/kernel/drm/device.rs
@@ -462,6 +462,20 @@ impl<T: drm::Driver> AsRef<T::ParentDevice<device::Normal>> for Device<T> {
}
}
+impl<T: drm::Driver> AsRef<T::ParentDevice<device::Bound>> for Device<T, Registered> {
+ #[inline]
+ fn as_ref(&self) -> &T::ParentDevice<device::Bound> {
+ let dev = (**self).as_ref().as_ref();
+
+ // SAFETY: A `Device<T, Registered>` guarantees that the parent device is bound.
+ let dev = unsafe { dev.as_bound() };
+
+ // SAFETY: The DRM device was constructed in `UnregisteredDevice::new()` with a parent
+ // device of type `T::ParentDevice`, hence `dev` is contained in a `T::ParentDevice`.
+ unsafe { device::AsBusDevice::from_device(dev) }
+ }
+}
+
// SAFETY: A `drm::Device` can be released from any thread.
unsafe impl<T: drm::Driver, C: DeviceContext> Send for Device<T, C> {}