From: "Benno Lossin" <lossin@kernel.org>
To: "Oliver Mangold" <oliver.mangold@pm.me>
Cc: "Andreas Hindborg" <a.hindborg@kernel.org>,
"Miguel Ojeda" <ojeda@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>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Asahi Lina" <lina+kernel@asahilina.net>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v11 1/4] rust: types: Add Ownable/Owned types
Date: Wed, 20 Aug 2025 09:41:04 +0200 [thread overview]
Message-ID: <DC732XTLKE1U.244I3Q2DR8JNK@kernel.org> (raw)
In-Reply-To: <aKVlA1Ctya6f2Nzc@mango>
On Wed Aug 20, 2025 at 8:02 AM CEST, Oliver Mangold wrote:
> On 250819 1913, Benno Lossin wrote:
>> On Tue Aug 19, 2025 at 10:53 AM CEST, Andreas Hindborg wrote:
>> > "Benno Lossin" <lossin@kernel.org> writes:
>> >> On Tue Aug 19, 2025 at 8:04 AM CEST, Oliver Mangold wrote:
>> >>> On 250819 0027, Benno Lossin wrote:
>> >>>> On Mon Aug 18, 2025 at 3:04 PM CEST, Oliver Mangold wrote:
>> >>>> > On 250818 1446, Andreas Hindborg wrote:
>> >>>> >> "Oliver Mangold" <oliver.mangold@pm.me> writes:
>> >>>> >> > +impl<T: OwnableMut> DerefMut for Owned<T> {
>> >>>> >> > + fn deref_mut(&mut self) -> &mut Self::Target {
>> >>>> >> > + // SAFETY: The type invariants guarantee that the object is valid, and that we can safely
>> >>>> >> > + // return a mutable reference to it.
>> >>>> >> > + unsafe { self.ptr.as_mut() }
>> >>>> >> > + }
>> >>>> >> > +}
>> >>>> >>
>> >>>> >> I think someone mentioned this before, but handing out mutable
>> >>>> >> references can be a problem if `T: !Unpin`. For instance, we don't want
>> >>>> >> to hand out `&mut Page` in case of `Owned<Page>`.
>> >>>> >>
>> >>>> >
>> >>>> > That was the reason, why `OwnableMut` was introduced in the first place.
>> >>>> > It's clear, I guess, that as-is it cannot be implemented on many classes.
>> >>>>
>> >>>> Yeah the safety requirements ensure that you can't implement it on
>> >>>> `!Unpin` types.
>> >>>>
>> >>>> But I'm not sure it's useful then? As you said there aren't many types
>> >>>> that will implement the type then, so how about we change the meaning
>> >>>> and make it give out a pinned mutable reference instead?
>> >>>
>> >>> Making `deref_mut()` give out a pinned type won't work. The return types of
>> >>> deref() are required to match.
>> >>
>> >> I meant the changes that Andreas suggested.
>> >
>> > Not sure what you are asking, but I need to assert exclusive access to
>> > an `Page`. I could either get this by taking a `&mut Owned<Page>` or a
>> > `Pin<&mut Page>`. I think the latter is more agnostic.
>>
>> The former isn't really correct? It's like having a `&mut Box<Page>`
>> which is weird. I was saying we can have a `DerefMut` impl gated on `T:
>> Unpin` and a `fn get_pin_mut(&mut self) -> Pin<&mut T>`.
>
> Yes. I think `Page` is the wrong example, as it already has owned semantics
> and does its own cleanup. Wrapping it in an Owned would be redundant.
After we have these owned patches, we are going to change `Page` to
`Opaque<bindings::page>`.
---
Cheers,
Benno
next prev parent reply other threads:[~2025-08-20 7:41 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <OYpTDi4YYXiWvLG3nO_8_WKsgOl9KOpun9l3a34m0jza6nmEWDCLTldSwCfZ2PRRprjXqGmrgSL2JN8rPOQH8Q==@protonmail.internalid>
2025-06-18 12:27 ` [PATCH v11 0/4] New trait OwnableRefCounted for ARef<->Owned conversion Oliver Mangold
2025-06-18 12:27 ` [PATCH v11 1/4] rust: types: Add Ownable/Owned types Oliver Mangold
2025-07-02 11:03 ` Benno Lossin
2025-07-07 6:58 ` Oliver Mangold
2025-07-07 9:23 ` Benno Lossin
2025-07-08 9:56 ` Oliver Mangold
2025-07-08 10:16 ` Miguel Ojeda
2025-07-08 13:06 ` Benno Lossin
2025-07-08 18:30 ` Andreas Hindborg
2025-07-08 19:18 ` Benno Lossin
2025-07-09 8:53 ` Andreas Hindborg
2025-07-09 9:11 ` Benno Lossin
2025-07-08 13:22 ` Andreas Hindborg
2025-07-08 14:53 ` Benno Lossin
2025-07-08 15:00 ` Benno Lossin
2025-07-07 12:26 ` Miguel Ojeda
2025-09-25 8:31 ` Oliver Mangold
2025-08-18 12:46 ` Andreas Hindborg
2025-08-18 13:04 ` Oliver Mangold
2025-08-18 22:27 ` Benno Lossin
2025-08-19 6:04 ` Oliver Mangold
2025-08-19 8:26 ` Benno Lossin
2025-08-19 8:45 ` Oliver Mangold
2025-08-19 9:00 ` Andreas Hindborg
2025-08-19 17:15 ` Benno Lossin
2025-08-20 10:48 ` Andreas Hindborg
2025-08-19 8:53 ` Andreas Hindborg
2025-08-19 17:13 ` Benno Lossin
2025-08-19 18:28 ` Andreas Hindborg
2025-08-20 6:02 ` Oliver Mangold
2025-08-20 7:41 ` Benno Lossin [this message]
2025-08-20 7:43 ` Oliver Mangold
2025-08-20 10:51 ` Andreas Hindborg
2025-06-18 12:27 ` [PATCH v11 2/4] rust: Split `AlwaysRefCounted` into two traits Oliver Mangold
2025-06-19 3:15 ` kernel test robot
2025-07-02 11:23 ` Benno Lossin
2025-07-07 7:42 ` Oliver Mangold
2025-07-07 9:27 ` Benno Lossin
2025-06-18 12:27 ` [PATCH v11 3/4] rust: Add missing SAFETY documentation for `ARef` example Oliver Mangold
2025-06-18 12:27 ` [PATCH v11 4/4] rust: Add `OwnableRefCounted` Oliver Mangold
2025-07-02 13:24 ` Benno Lossin
2025-07-07 8:07 ` Oliver Mangold
2025-07-07 9:33 ` Benno Lossin
2025-07-07 11:12 ` Andreas Hindborg
2025-07-07 11:47 ` Benno Lossin
2025-07-07 13:21 ` Andreas Hindborg
2025-07-07 15:39 ` Benno Lossin
2025-07-08 13:15 ` Andreas Hindborg
2025-07-08 14:50 ` Benno Lossin
2025-07-08 15:35 ` Andreas Hindborg
2025-07-08 9:36 ` Oliver Mangold
2025-07-08 13:42 ` Benno Lossin
2025-08-05 17:23 ` [PATCH v11 0/4] New trait OwnableRefCounted for ARef<->Owned conversion Danilo Krummrich
2025-08-06 5:56 ` Oliver Mangold
2025-08-15 10:12 ` Andreas Hindborg
2025-08-18 5:59 ` Oliver Mangold
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=DC732XTLKE1U.244I3Q2DR8JNK@kernel.org \
--to=lossin@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=gary@garyguo.net \
--cc=lina+kernel@asahilina.net \
--cc=linux-kernel@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=oliver.mangold@pm.me \
--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.