rust: device: implement Device::parent()

Device::parent() returns a reference to the device' parent device, if
any.

Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20250414131934.28418-3-dakr@kernel.org
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
Danilo Krummrich 2025-04-14 15:18:05 +02:00
parent 9647b6c509
commit a4c9f71e34
1 changed files with 19 additions and 0 deletions

View File

@ -67,6 +67,25 @@ pub(crate) fn as_raw(&self) -> *mut bindings::device {
self.0.get()
}
/// Returns a reference to the parent device, if any.
#[expect(unused)]
pub(crate) fn parent(&self) -> Option<&Self> {
// SAFETY:
// - By the type invariant `self.as_raw()` is always valid.
// - The parent device is only ever set at device creation.
let parent = unsafe { (*self.as_raw()).parent };
if parent.is_null() {
None
} else {
// SAFETY:
// - Since `parent` is not NULL, it must be a valid pointer to a `struct device`.
// - `parent` is valid for the lifetime of `self`, since a `struct device` holds a
// reference count of its parent.
Some(unsafe { Self::as_ref(parent) })
}
}
/// Convert a raw C `struct device` pointer to a `&'a Device`.
///
/// # Safety