From: Andreas Hindborg <a.hindborg@kernel.org>
To: "Dirk Behme" <dirk.behme@de.bosch.com>
Cc: <rust-for-linux@vger.kernel.org>, <ojeda@kernel.org>,
<daniel.almeida@collabora.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>
Subject: Re: [PATCH v2 2/2] rust: types: `Opaque` doc: Add some destructor description
Date: Wed, 19 Feb 2025 09:06:26 +0100 [thread overview]
Message-ID: <87seoae4u5.fsf@kernel.org> (raw)
In-Reply-To: <20250219055516.359454-2-dirk.behme@de.bosch.com> (Dirk Behme's message of "Wed, 19 Feb 2025 06:55:16 +0100")
"Dirk Behme" <dirk.behme@de.bosch.com> writes:
> In the discussion [1] some `Opaque` documentation updates have
> been proposed. In that discussion it was clarified that `Opaque`
> is intended to be used for (partial) uninitialized or changing C
> structs. And which consequences this has for using raw pointers
> or the destruction. Improve the `Opaque` documentation by adding
> these conclusions from that discussion.
>
> Suggested-by: Daniel Almeida <daniel.almeida@collabora.com>
> Link: https://lore.kernel.org/rust-for-linux/F8AB1160-F8CF-412F-8B88-4C79D65B53A1@collabora.com/ [1]
> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
> ---
> Changes in v2:
> * Split patch into two (Miguel)
> * Improve commit message and subject (Miguel)
>
> rust/kernel/types.rs | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs
> index 8ed802444c594..08ff4949d2a61 100644
> --- a/rust/kernel/types.rs
> +++ b/rust/kernel/types.rs
> @@ -274,14 +274,20 @@ fn drop(&mut self) {
> /// [`Opaque<T>`] is meant to be used with FFI objects that are never interpreted by Rust code.
> ///
> /// It is used to wrap structs from the C side, like for example `Opaque<bindings::mutex>`.
> -/// It gets rid of all the usual assumptions that Rust has for a value of type `T`:
> -///
> -/// * The value is allowed to be uninitialized (for example have invalid bit patterns: `3` for a
> -/// [`bool`]).
> +/// This is useful for C structs that are not fully initialized (yet) or might change their
> +/// content from C side at runtime. [`Opaque<T>`] gets rid of all the usual assumptions that
> +/// Rust has for a value of type `T`:
> +///
> +/// * The value is allowed to be uninitialized or invalid (for example have invalid bit patterns:
> +/// `3` for a [`bool`]).
> +/// * By dereferencing a raw pointer to the value you are unsafely asserting that the value is
> +/// valid *right now*.
> /// * The value is allowed to be mutated, when a `&Opaque<T>` exists on the Rust side.
> /// * No uniqueness for mutable references: it is fine to have multiple `&mut Opaque<T>` point to
> /// the same value.
> /// * The value is not allowed to be shared with other threads (i.e. it is `!Sync`).
> +/// * The destructor of [`Opaque<T>`] does *not* run the destructor of `T`, as `T` may
> +/// be uninitialized, as described above.
Thanks for clarifying the docs. What you write is correct, but I would
prefer a more terse and formal language, at least for the first
paragraph. Perhaps you can include the following in some form:
> Opaque opts out of the following rust language invariants for the
> contained `T`:
>
> - Initialization invariant - the contained value is allowed to be
> uninitialized and contain invalid bit patterns.
> - Immutability invariant - `Opaque` allows interior mutability.
> - Uniqueness invariant - `Opaque` allows aliasing of shared references.
>
> Further, `Opaque` is `!Unpin`.
And then after that paragraph, you could elaborate with examples and so forth?
Best regards,
Andreas Hindborg
next prev parent reply other threads:[~2025-02-19 8:06 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <QD0GOJgCH2aX4JQuTDvwU-r5K8zcpSxD3eN6ixps2goHl3elDKOJFlkzUpSQSKaYDFls5CElJa-QXcoHLpInog==@protonmail.internalid>
2025-02-19 5:55 ` [PATCH v2 1/2] rust: types: `Opaque` doc: Add some intra doc linkage Dirk Behme
2025-02-19 5:55 ` [PATCH v2 2/2] rust: types: `Opaque` doc: Add some destructor description Dirk Behme
2025-02-19 8:06 ` Andreas Hindborg [this message]
2025-02-25 10:07 ` Daniel Almeida
2025-02-25 10:36 ` Andreas Hindborg
2025-02-25 11:38 ` Miguel Ojeda
2025-02-25 10:20 ` Daniel Almeida
2025-02-19 7:59 ` [PATCH v2 1/2] rust: types: `Opaque` doc: Add some intra doc linkage Andreas Hindborg
2025-02-19 10:54 ` Miguel Ojeda
2025-02-22 18:26 ` Miguel Ojeda
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=87seoae4u5.fsf@kernel.org \
--to=a.hindborg@kernel.org \
--cc=aliceryhl@google.com \
--cc=boqun.feng@gmail.com \
--cc=daniel.almeida@collabora.com \
--cc=dirk.behme@de.bosch.com \
--cc=gary@garyguo.net \
--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.