From: Andreas Hindborg <a.hindborg@kernel.org>
To: "Tamir Duberstein" <tamird@gmail.com>
Cc: "Miguel Ojeda" <ojeda@kernel.org>,
"Anna-Maria Behnsen" <anna-maria@linutronix.de>,
"Frederic Weisbecker" <frederic@kernel.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
"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>,
"Benno Lossin" <benno.lossin@proton.me>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Lyude Paul" <lyude@redhat.com>,
"Guangbo Cui" <2407018371@qq.com>,
"Dirk Behme" <dirk.behme@gmail.com>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v9 01/13] rust: hrtimer: introduce hrtimer support
Date: Wed, 26 Feb 2025 12:48:18 +0100 [thread overview]
Message-ID: <87eczludtp.fsf@kernel.org> (raw)
In-Reply-To: <CAJ-ks9mCvGJoeLhkGHLU-7Q-=g_4XHfX4DBX9w=ZcP4jpWXsPQ@mail.gmail.com> (Tamir Duberstein's message of "Tue, 25 Feb 2025 15:13:51 -0500")
"Tamir Duberstein" <tamird@gmail.com> writes:
> On Tue, Feb 25, 2025 at 2:12 PM Andreas Hindborg <a.hindborg@kernel.org> wrote:
>>
>> "Tamir Duberstein" <tamird@gmail.com> writes:
>>
>> > On Tue, Feb 25, 2025 at 3:52 AM Andreas Hindborg <a.hindborg@kernel.org> wrote:
>> >>
>> >> "Tamir Duberstein" <tamird@gmail.com> writes:
>> >>
>> >> > Hi Andreas, mostly grammar and prose clarity comments below.
>> >> >
>> >> > I still think HasHrTimer::OFFSET is less clear and more fragile than
>> >> > just generating compiler-checked implementations in the macro (you're
>> >> > already generating OFFSET and one method implementation rather than
>> >> > generating 2 method implementations).
>> >>
>> >> I don't agree with you assessment. My argument is that I would rather
>> >> generate as little code as possible in the macro, and the trait would in
>> >> practice never be implemented by hand.
>> >
>> > In the current patch, the trait:
>> > - provides raw_get_timer
>> > - provides timer_container_of
>> > and the macro:
>> > - defines OFFSET
>> > - defines raw_get_timer
>> >
>> > The justification for the redundancy is that without defining
>> > raw_get_timer in the macro the user might invoke the macro
>> > incorrectly.
>>
>> It's not that they might invoke the macro incorrectly, it's that we
>> would not be able to make the macro safe. The way it is implemented now,
>> it will only compile if it is safe.
>>
>> > But why is that better than defining both methods in the
>> > macro?
>>
>> Because it is generating less code. I would rather write the library code than
>> have the macro generate the code for us on every invocation.
>
> How is it less code? It's the same amount, just harder to reason about
> because you're doing pointer arithmetic rather than relying on
> existing macros like container_of.
>
>>
>> > Either way the macro provides 2 items. The key benefit of
>> > defining both methods in the macro is that there's no dead-code
>> > implementation of raw_get_pointer in the trait. It also reduces the
>> > surface of the trait, which is always a benefit due to Hyrum's law.
>>
>> When you say that the surface would be smaller, you mean that by
>> dropping OFFSET entirely, the trait would have fewer items?
>
> Yes.
>
>
>> I'm not familiar with Hyrum's law.
>
> TL;DR is that anything that can become load bearing will. So even if
> the intent is that OFFSET is an implementation detail, there's no way
> to enforce that, and so someone will misuse it.
I don't fully agree with your assessment, but either way is fine for me.
So I shall implement your suggestion.
[...]
>> > I noticed below I had suggested talking about the handler as
>> > "returning" rather than "finishing execution"; please consider that
>> > throughout.
>>
>> I do not prefer one over the other. Do you care strongly about this one?
>
> I prefer return since it's more obvious but don't feel strongly about
> the choice, only that the usage is consistent.
Ok, let's do that then.
[...]
>> >> >> +/// Implemented by pointer types that point to structs that embed a [`HrTimer`].
>> >
>> > This comment says "embed a [`HrTimer`]" but in `trait HrTimer` the
>> > wording is "Implemented by structs that contain timer nodes."
>>
>> I don't follow. There is no `trait HrTimer`, there is a `struct
>> HrTimer`, but it has no such wording.
>>
>> > Is the difference significant?
>>
>> No, I would say they are semantically the same. Whether a struct
>> contains a field of a type or it embeds another struct - I would say
>> that is the same.
>
> Can we use the same wording in both places then?
OK.
>> > Also the naming of the two traits feels inconsistent; one contains
>> > "Has" and the other doesn't.
>>
>> One is not a trait, not sure if you are looking on another item than
>> `struct HrTimer`?
>
> Sorry, I meant HasHrTimer and HrTimerPointer rather than HrTimer and
> HrTimerPointer.
`HasHrTimer` is named so because it is meant to be implemented by types
that contain a field of type `HrTimer`.
`HrTimerPointer` is meant to be implemented by pointer types that point
to types that implement `HasHrTimer`.
They are different, and the naming reflect that.
I will not rename `HasHrTimer` to `ContainsHrTimer`, because the rest of
the rust kernel uses the `HasFoo` naming scheme.
Best regards,
Andreas Hindborg
next prev parent reply other threads:[~2025-02-26 11:48 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-24 12:03 [PATCH v9 00/13] hrtimer Rust API Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 01/13] rust: hrtimer: introduce hrtimer support Andreas Hindborg
2025-02-24 13:19 ` Andreas Hindborg
2025-02-24 15:46 ` Boqun Feng
2025-02-24 16:23 ` Miguel Ojeda
2025-02-24 16:31 ` Boqun Feng
2025-02-24 16:45 ` Miguel Ojeda
2025-02-24 17:01 ` Boqun Feng
2025-02-24 18:58 ` Andreas Hindborg
2025-02-24 19:18 ` Boqun Feng
2025-02-24 19:52 ` Andreas Hindborg
2025-02-24 20:22 ` Boqun Feng
2025-02-25 5:50 ` Andreas Hindborg
2025-02-26 16:31 ` Frederic Weisbecker
2025-02-26 19:41 ` Andreas Hindborg
2025-02-24 20:04 ` Tamir Duberstein
2025-02-25 8:52 ` Andreas Hindborg
2025-02-25 15:37 ` Tamir Duberstein
2025-02-25 19:12 ` Andreas Hindborg
2025-02-25 20:13 ` Tamir Duberstein
2025-02-26 11:48 ` Andreas Hindborg [this message]
2025-02-26 15:29 ` Tamir Duberstein
2025-03-07 9:09 ` Andreas Hindborg
2025-02-25 11:36 ` Markus Elfring
2025-02-25 12:13 ` Andreas Hindborg
2025-02-27 8:31 ` Thomas Gleixner
2025-02-27 10:44 ` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 02/13] rust: sync: add `Arc::as_ptr` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 03/13] rust: hrtimer: implement `HrTimerPointer` for `Arc` Andreas Hindborg
2025-02-24 23:13 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 04/13] rust: hrtimer: allow timer restart from timer handler Andreas Hindborg
2025-02-24 23:23 ` Lyude Paul
2025-02-25 8:58 ` Andreas Hindborg
2025-02-25 21:46 ` Lyude Paul
2025-02-26 13:43 ` Andreas Hindborg
2025-02-26 19:26 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 05/13] rust: hrtimer: add `UnsafeHrTimerPointer` Andreas Hindborg
2025-02-24 23:24 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 06/13] rust: hrtimer: add `hrtimer::ScopedHrTimerPointer` Andreas Hindborg
2025-02-24 23:25 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 07/13] rust: hrtimer: implement `UnsafeHrTimerPointer` for `Pin<&T>` Andreas Hindborg
2025-02-24 23:32 ` Lyude Paul
2025-02-25 9:01 ` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 08/13] rust: hrtimer: implement `UnsafeHrTimerPointer` for `Pin<&mut T>` Andreas Hindborg
2025-02-24 23:33 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 09/13] rust: alloc: add `Box::into_pin` Andreas Hindborg
2025-02-24 23:34 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 10/13] rust: hrtimer: implement `HrTimerPointer` for `Pin<Box<T>>` Andreas Hindborg
2025-02-24 23:37 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 11/13] rust: hrtimer: add `HrTimerMode` Andreas Hindborg
2025-02-24 23:40 ` Lyude Paul
2025-02-25 9:04 ` Andreas Hindborg
2025-02-25 21:49 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 12/13] rust: hrtimer: add clocksource selection through `ClockSource` Andreas Hindborg
2025-02-24 23:42 ` Lyude Paul
2025-02-27 9:11 ` Thomas Gleixner
2025-02-27 9:24 ` Thomas Gleixner
2025-02-27 11:18 ` Andreas Hindborg
2025-02-27 14:22 ` Thomas Gleixner
2025-02-27 16:03 ` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 13/13] rust: hrtimer: add maintainer entry Andreas Hindborg
2025-02-24 15:44 ` Boqun Feng
2025-02-26 16:17 ` Frederic Weisbecker
2025-02-26 19:42 ` Andreas Hindborg
2025-02-26 19:49 ` Lyude Paul
2025-02-26 21:08 ` Andreas Hindborg
2025-02-27 9:12 ` Thomas Gleixner
2025-02-27 10:45 ` Andreas Hindborg
2025-02-24 23:43 ` Lyude Paul
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=87eczludtp.fsf@kernel.org \
--to=a.hindborg@kernel.org \
--cc=2407018371@qq.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=anna-maria@linutronix.de \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dirk.behme@gmail.com \
--cc=frederic@kernel.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lyude@redhat.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@gmail.com \
--cc=tglx@linutronix.de \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox