diff options
author | Benno Lossin <benno.lossin@proton.me> | 2023-04-08 12:25:39 +0000 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2023-04-12 18:41:05 +0200 |
commit | 3ff6e785ad99893f1d502156d23560efd30fec4d (patch) | |
tree | 43f1469f5ea3e1cc17096d757b272cd5313b72b1 /rust | |
parent | d6dbca3592209d29c10e171224c34803805e88ca (diff) | |
download | linux-3ff6e785ad99893f1d502156d23560efd30fec4d.tar.gz linux-3ff6e785ad99893f1d502156d23560efd30fec4d.tar.bz2 linux-3ff6e785ad99893f1d502156d23560efd30fec4d.zip |
rust: types: add `Opaque::raw_get`
This function mirrors `UnsafeCell::raw_get`. It avoids creating a
reference and allows solely using raw pointers.
The `pin-init` API will be using this, since uninitialized memory
requires raw pointers.
Signed-off-by: Benno Lossin <benno.lossin@proton.me>
Reviewed-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20230408122429.1103522-6-y86-dev@protonmail.com
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'rust')
-rw-r--r-- | rust/kernel/types.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs index 9d0fdbc55843..ff2b2fac951d 100644 --- a/rust/kernel/types.rs +++ b/rust/kernel/types.rs @@ -238,6 +238,14 @@ impl<T> Opaque<T> { pub fn get(&self) -> *mut T { UnsafeCell::raw_get(self.0.as_ptr()) } + + /// Gets the value behind `this`. + /// + /// This function is useful to get access to the value without creating intermediate + /// references. + pub const fn raw_get(this: *const Self) -> *mut T { + UnsafeCell::raw_get(this.cast::<UnsafeCell<T>>()) + } } /// A sum type that always holds either a value of type `L` or `R`. |