From: Christian Schrefl <chrisi.schrefl@gmail.com>
To: "Miguel Ojeda" <ojeda@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Arnd Bergmann" <arnd@arndb.de>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Lee Jones" <lee@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Benno Lossin" <lossin@kernel.org>
Cc: "Gerald Wisböck" <gerald.wisboeck@feather.ink>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 1/3] rust: implement `Wrapper<T>` for `Opaque<T>`
Date: Fri, 30 May 2025 22:53:21 +0200 [thread overview]
Message-ID: <fa66bd89-e52b-45ef-969c-c6f147f20185@gmail.com> (raw)
In-Reply-To: <20250530-b4-rust_miscdevice_registrationdata-v4-1-d313aafd7e59@gmail.com>
On 30.05.25 10:46 PM, Christian Schrefl wrote:
> Moves the implementation for `pin-init` from an associated function
> to the trait function of the `Wrapper` trait and extends the
> implementation to support pin-initializers with error types.
>
> Adds a use for the `Wrapper` trait in `revocable.rs`, to use the new
> `pin-init` function. This is currently the only usage in the kernel.
>
> Reviewed-by: Gerald Wisböck <gerald.wisboeck@feather.ink>
> Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> Reviewed-by: Benno Lossin <lossin@kernel.org>
> Signed-off-by: Christian Schrefl <chrisi.schrefl@gmail.com>
> ---
Danilo, FYI this is basically a patch from my `UnsafePinned`
series [0] that I've used instead of your patch [1] that does something similar.
(I've only dropped `the call is infallible` from the safety
comment like in your patch since I missed that before).
Let me know if you want me to handle this any different.
[0]: https://lore.kernel.org/rust-for-linux/20250511-rust_unsafe_pinned-v4-2-a86c32e47e3d@gmail.com/
[1]: https://lore.kernel.org/rust-for-linux/20250530142447.166524-2-dakr@kernel.org/
Cheers
Christian
> rust/kernel/revocable.rs | 2 ++
> rust/kernel/types.rs | 25 +++++++++++++------------
> 2 files changed, 15 insertions(+), 12 deletions(-)
>
> diff --git a/rust/kernel/revocable.rs b/rust/kernel/revocable.rs
> index 1e5a9d25c21b279b01f90b02997492aa4880d84f..4db68ea2207ebafcc09d082fdc1e281f31846a38 100644
> --- a/rust/kernel/revocable.rs
> +++ b/rust/kernel/revocable.rs
> @@ -5,6 +5,8 @@
> //! The [`Revocable`] type wraps other types and allows access to them to be revoked. The existence
> //! of a [`RevocableGuard`] ensures that objects remain valid.
>
> +use pin_init::Wrapper;
> +
> use crate::{bindings, prelude::*, sync::rcu, types::Opaque};
> use core::{
> marker::PhantomData,
> diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs
> index 86562e738eac85480a048041e979335b81c5e3c9..7ab70d5f76099c3442dce5b02c6b226fc74c851e 100644
> --- a/rust/kernel/types.rs
> +++ b/rust/kernel/types.rs
> @@ -9,7 +9,7 @@
> ops::{Deref, DerefMut},
> ptr::NonNull,
> };
> -use pin_init::{PinInit, Zeroable};
> +use pin_init::{PinInit, Wrapper, Zeroable};
>
> /// Used to transfer ownership to and from foreign (non-Rust) languages.
> ///
> @@ -345,17 +345,6 @@ pub const fn uninit() -> Self {
> }
> }
>
> - /// Create an opaque pin-initializer from the given pin-initializer.
> - pub fn pin_init(slot: impl PinInit<T>) -> impl PinInit<Self> {
> - Self::ffi_init(|ptr: *mut T| {
> - // SAFETY:
> - // - `ptr` is a valid pointer to uninitialized memory,
> - // - `slot` is not accessed on error; the call is infallible,
> - // - `slot` is pinned in memory.
> - let _ = unsafe { PinInit::<T>::__pinned_init(slot, ptr) };
> - })
> - }
> -
> /// Creates a pin-initializer from the given initializer closure.
> ///
> /// The returned initializer calls the given closure with the pointer to the inner `T` of this
> @@ -406,6 +395,18 @@ pub const fn raw_get(this: *const Self) -> *mut T {
> UnsafeCell::raw_get(this.cast::<UnsafeCell<MaybeUninit<T>>>()).cast::<T>()
> }
> }
> +impl<T> Wrapper<T> for Opaque<T> {
> + /// Create an opaque pin-initializer from the given pin-initializer.
> + fn pin_init<E>(slot: impl PinInit<T, E>) -> impl PinInit<Self, E> {
> + Self::try_ffi_init(|ptr: *mut T| {
> + // SAFETY:
> + // - `ptr` is a valid pointer to uninitialized memory,
> + // - `slot` is not accessed on error,
> + // - `slot` is pinned in memory.
> + unsafe { PinInit::<T, E>::__pinned_init(slot, ptr) }
> + })
> + }
> +}
>
> /// Types that are _always_ reference counted.
> ///
>
next prev parent reply other threads:[~2025-05-30 20:53 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-30 20:46 [PATCH v4 0/3] rust: miscdevice: add additional data to MiscDeviceRegistration Christian Schrefl
2025-05-30 20:46 ` [PATCH v4 1/3] rust: implement `Wrapper<T>` for `Opaque<T>` Christian Schrefl
2025-05-30 20:53 ` Christian Schrefl [this message]
2025-05-30 21:43 ` Danilo Krummrich
2025-05-30 20:46 ` [PATCH v4 2/3] rust: miscdevice: add additional data to MiscDeviceRegistration Christian Schrefl
2025-05-31 12:23 ` Benno Lossin
2025-06-02 21:16 ` Christian Schrefl
2025-06-03 23:29 ` Benno Lossin
2025-06-04 8:48 ` Miguel Ojeda
2025-06-04 9:54 ` Christian Schrefl
2025-06-04 10:13 ` Miguel Ojeda
2025-06-05 14:57 ` Christian Schrefl
2025-06-05 16:05 ` Benno Lossin
2025-06-05 16:52 ` Christian Schrefl
2025-06-05 17:27 ` Benno Lossin
2025-06-07 11:34 ` Christian Schrefl
2025-06-07 15:37 ` Benno Lossin
2025-06-07 15:39 ` Christian Schrefl
2025-06-07 19:05 ` Benno Lossin
2025-06-04 9:40 ` Alice Ryhl
2025-06-04 9:42 ` Christian Schrefl
2025-06-04 9:43 ` Alice Ryhl
2025-06-04 9:37 ` Alice Ryhl
2025-06-04 9:41 ` Alice Ryhl
2025-05-30 20:46 ` [PATCH v4 3/3] rust: miscdevice: adjust the rust_misc_device sample to use RegistrationData Christian Schrefl
2025-05-31 12:27 ` Benno Lossin
2025-05-31 13:40 ` Miguel Ojeda
2025-06-02 21:20 ` Christian Schrefl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fa66bd89-e52b-45ef-969c-c6f147f20185@gmail.com \
--to=chrisi.schrefl@gmail.com \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=arnd@arndb.de \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=gerald.wisboeck@feather.ink \
--cc=gregkh@linuxfoundation.org \
--cc=lee@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.