From: Andreas Hindborg <nmi@metaspace.dk>
To: Alice Ryhl <aliceryhl@google.com>
Cc: yakoyoku@gmail.com, alex.gaynor@gmail.com,
benno.lossin@proton.me, bjorn3_gh@protonmail.com,
boqun.feng@gmail.com, gary@garyguo.net, jiangshanlai@gmail.com,
linux-kernel@vger.kernel.org, ojeda@kernel.org,
patches@lists.linux.dev, rust-for-linux@vger.kernel.org,
tj@kernel.org, wedsonaf@gmail.com
Subject: Re: [PATCH v1 6/7] rust: workqueue: add safe API to workqueue
Date: Tue, 30 May 2023 09:19:52 +0200 [thread overview]
Message-ID: <875y8ab7y0.fsf@metaspace.dk> (raw)
In-Reply-To: <20230523110709.4077557-1-aliceryhl@google.com>
Alice Ryhl <aliceryhl@google.com> writes:
> On 5/18/23 21:17, Martin Rodriguez Reboredo wrote:
>> On 5/17/23 17:31, Alice Ryhl wrote:
>>> +unsafe impl<T> WorkItem for Arc<T>
>>> +where
>>> + T: ArcWorkItem + HasWork<Self> + ?Sized,
>>> +{
>>> + type EnqueueOutput = Result<(), Self>;
>>> +
>>> + unsafe fn __enqueue<F>(self, queue_work_on: F) -> Self::EnqueueOutput
>>> + where
>>> + F: FnOnce(*mut bindings::work_struct) -> bool,
>>> + {
>>> + let ptr = Arc::into_raw(self);
>>> +
>>> + // Using `get_work_offset` here for object-safety.
>>> + //
>>> + // SAFETY: The pointer is valid since we just got it from `into_raw`.
>>> + let off = unsafe { (&*ptr).get_work_offset() };
>>> +
>>> + // SAFETY: The `HasWork` impl promises that this offset gives us a field of type
>>> + // `Work<Self>` in the same allocation.
>>> + let work_ptr = unsafe { (ptr as *const u8).add(off) as *const Work<Self> };
>>> + // SAFETY: The pointer is not dangling.
>>> + let work_ptr = unsafe { Work::raw_get(work_ptr) };
>>> +
>>> + match (queue_work_on)(work_ptr) {
>>
>> Match for boolean is not a good pattern in my eyes, if-else should be
>> used instead.
>
> I think this is a question of style. For a comparison:
>
> match (queue_work_on)(work_ptr) {
> true => Ok(()),
> // SAFETY: The work queue has not taken ownership of the pointer.
> false => Err(unsafe { Arc::from_raw(ptr) }),
> }
>
> vs
>
> if (queue_work_on)(work_ptr) {
> Ok(())
> } else {
> // SAFETY: The work queue has not taken ownership of the pointer.
> Err(unsafe { Arc::from_raw(ptr) }),
> }
>
> I'm happy to change it if others disagree, but when the branches
> evaluate to a short expression like they do here, I quite like the first
> version.
I prefer the first one, but both look OK to me. Is one more idiomatic
than the other, or is it just a matter of personal preference?
BR Andreas
>
>> Also aren't the parens around the closure unnecessary?
>
> Hmm, parenthesises are often required around closures, but it's possible
> that it is only required for stuff like `self.closure(args)` to
> disambiguate between a `closure` field (of pointer type) and a `closure`
> method. I can check and remove them if they are not necessary.
next prev parent reply other threads:[~2023-05-30 7:25 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-17 20:31 [PATCH v1 0/7] Bindings for the workqueue Alice Ryhl
2023-05-17 20:31 ` [PATCH v1 1/7] rust: workqueue: add low-level workqueue bindings Alice Ryhl
2023-05-18 14:51 ` Martin Rodriguez Reboredo
2023-05-19 9:40 ` Alice Ryhl
2023-05-19 12:04 ` Martin Rodriguez Reboredo
2023-05-23 10:03 ` Alice Ryhl
2023-05-30 8:26 ` Andreas Hindborg
2023-05-17 20:31 ` [PATCH v1 2/7] rust: add offset_of! macro Alice Ryhl
2023-05-18 14:51 ` Martin Rodriguez Reboredo
2023-05-23 15:48 ` Gary Guo
2023-05-24 12:26 ` Alice Ryhl
2023-05-30 8:40 ` Andreas Hindborg
2023-05-17 20:31 ` [PATCH v1 3/7] rust: sync: add `Arc::{from_raw, into_raw}` Alice Ryhl
2023-05-18 14:51 ` Martin Rodriguez Reboredo
2023-05-23 15:43 ` Gary Guo
2023-05-24 11:19 ` Alice Ryhl
2023-05-24 10:20 ` Andreas Hindborg
2023-05-24 11:11 ` Alice Ryhl
2023-05-25 7:45 ` Andreas Hindborg
2023-05-25 16:32 ` Gary Guo
2023-05-30 7:23 ` Andreas Hindborg
2023-05-17 20:31 ` [PATCH v1 4/7] rust: workqueue: define built-in queues Alice Ryhl
2023-05-18 14:52 ` Martin Rodriguez Reboredo
2023-05-25 11:40 ` Andreas Hindborg
2023-05-31 14:02 ` Alice Ryhl
2023-06-02 10:23 ` Andreas Hindborg (Samsung)
2023-05-17 20:31 ` [PATCH v1 5/7] rust: workqueue: add helper for defining work_struct fields Alice Ryhl
2023-05-18 23:18 ` Martin Rodriguez Reboredo
2023-05-24 14:50 ` Benno Lossin
2023-05-30 8:44 ` Andreas Hindborg
2023-05-31 9:00 ` Alice Ryhl
2023-05-31 10:18 ` Andreas Hindborg
2023-05-17 20:31 ` [PATCH v1 6/7] rust: workqueue: add safe API to workqueue Alice Ryhl
2023-05-19 0:17 ` Martin Rodriguez Reboredo
2023-05-23 11:07 ` Alice Ryhl
2023-05-30 7:19 ` Andreas Hindborg [this message]
2023-05-30 13:23 ` Martin Rodriguez Reboredo
2023-05-30 14:13 ` Miguel Ojeda
2023-05-24 14:51 ` Benno Lossin
2023-05-31 9:07 ` Alice Ryhl
2023-05-30 8:51 ` Andreas Hindborg
2023-05-31 14:07 ` Alice Ryhl
2023-05-17 20:31 ` [PATCH v1 7/7] rust: workqueue: add `try_spawn` helper method Alice Ryhl
2023-05-19 0:22 ` Martin Rodriguez Reboredo
2023-05-24 14:52 ` Benno Lossin
2023-05-31 14:03 ` Alice Ryhl
2023-05-17 21:48 ` [PATCH v1 0/7] Bindings for the workqueue Tejun Heo
2023-05-17 22:22 ` Alice Ryhl
2023-05-23 14:08 ` Andreas Hindborg
2023-05-23 14:14 ` Andreas Hindborg
2023-05-24 12:33 ` Alice Ryhl
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=875y8ab7y0.fsf@metaspace.dk \
--to=nmi@metaspace.dk \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=gary@garyguo.net \
--cc=jiangshanlai@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=patches@lists.linux.dev \
--cc=rust-for-linux@vger.kernel.org \
--cc=tj@kernel.org \
--cc=wedsonaf@gmail.com \
--cc=yakoyoku@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox