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()
|
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`.
|
/// Convert a raw C `struct device` pointer to a `&'a Device`.
|
||||||
///
|
///
|
||||||
/// # Safety
|
/// # Safety
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue