rust: miscdevice: Provide accessor to pull out miscdevice::this_device
There are situations where a pointer to a `struct device` will become necessary (e.g. for calling into dev_*() functions). This accessor allows callers to pull this out from the `struct miscdevice`. Signed-off-by: Lee Jones <lee@kernel.org> Signed-off-by: Alice Ryhl <aliceryhl@google.com> Tested-by: Lee Jones <lee@kernel.org> Reviewed-by: Danilo Krummrich <dakr@kernel.org> Link: https://lore.kernel.org/r/20241210-miscdevice-file-param-v3-3-b2a79b666dc5@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
88441d5c6d
commit
284ae0be4d
@@ -10,6 +10,7 @@
|
||||
|
||||
use crate::{
|
||||
bindings,
|
||||
device::Device,
|
||||
error::{to_result, Error, Result, VTABLE_DEFAULT_ERROR},
|
||||
fs::File,
|
||||
prelude::*,
|
||||
@@ -85,6 +86,16 @@ impl<T: MiscDevice> MiscDeviceRegistration<T> {
|
||||
pub fn as_raw(&self) -> *mut bindings::miscdevice {
|
||||
self.inner.get()
|
||||
}
|
||||
|
||||
/// Access the `this_device` field.
|
||||
pub fn device(&self) -> &Device {
|
||||
// SAFETY: This can only be called after a successful register(), which always
|
||||
// initialises `this_device` with a valid device. Furthermore, the signature of this
|
||||
// function tells the borrow-checker that the `&Device` reference must not outlive the
|
||||
// `&MiscDeviceRegistration<T>` used to obtain it, so the last use of the reference must be
|
||||
// before the underlying `struct miscdevice` is destroyed.
|
||||
unsafe { Device::as_ref((*self.as_raw()).this_device) }
|
||||
}
|
||||
}
|
||||
|
||||
#[pinned_drop]
|
||||
|
||||
Reference in New Issue
Block a user