mirror of https://github.com/torvalds/linux.git
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:
parent
9647b6c509
commit
a4c9f71e34
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue