public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
From: "Alexandre Courbot" <acourbot@nvidia.com>
To: "Joel Fernandes" <joelagnelf@nvidia.com>
Cc: "John Hubbard" <jhubbard@nvidia.com>,
	"Danilo Krummrich" <dakr@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Yury Norov" <yury.norov@gmail.com>,
	"Alistair Popple" <apopple@nvidia.com>,
	"Timur Tabi" <ttabi@nvidia.com>, "Edwin Peer" <epeer@nvidia.com>,
	"Eliot Courtney" <ecourtney@nvidia.com>,
	"Dirk Behme" <dirk.behme@de.bosch.com>,
	"Steven Price" <steven.price@arm.com>,
	rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 5/7] rust: io: add `register!` macro
Date: Wed, 28 Jan 2026 16:42:34 +0900	[thread overview]
Message-ID: <DG01XSMD0VL7.2LN9LJPH57FFW@nvidia.com> (raw)
In-Reply-To: <77AAED55-B8AE-428D-AD3D-D52333DB8D8A@nvidia.com>

On Wed Jan 28, 2026 at 12:47 PM JST, Joel Fernandes wrote:
> On Jan 27, 2026, at 10:02 PM, John Hubbard <jhubbard@nvidia.com> wrote:
>> On 1/27/26 6:37 PM, Alexandre Courbot wrote:
>>> Add a macro for defining hardware register types with I/O accessors.
>> ...
>>> +/// Fields are instances of [`Bounded`](kernel::num::Bounded) and can be read by calling their
>>> +/// getter method, which is named after them. They also have setter methods prefixed with `set_`
>>> +/// for runtime values and `with_` for constant values. All setters return the updated register
>> OK, this still looks like a naming problem that we don't need to create.
>> Let's just pick either "set_" or "with_" as a prefix (it seems that
>> "with_" has won out, in the v3 discussion thread), and then add "const",
>> so that the name doesn't require explanation.
>>
>> ...
>>> +/// // Update some fields and write the new value back.
>>> +/// boot0
>>> +///     // Constant values.
>>> +///     .with_major_revision::<3>()
>>> +///     .with_minor_revision::<10>()
>>> +///     // Run-time value.
>>> +///     .set_vendor_id(obtain_vendor_id())
>>
>> See, that is just not obvious at all, why it's different. That's why
>> you had to write a couple of comments.
>>
>> .with_const_major_revision(), on the other hand, keeps the pattern
>> clear and obvious. No comments necessary.
>>
>> nova-core doesn't even use the const_ settors yet at all, according
>> to my quick read of the (very helpful) [PATCH FOR REFERENCE v4 7/7].
>> So clearly it is a bit rare, and the extra characters won't come into
>> play in daily life.

Great, if everyone agrees on with/with_const then this is definitely
idiomatic and clear (and not too verbose).

I'll respin tomorrow unless there is new input.

>
> I completely agree with John here, let us please not create a confusing API.
> I would much rather use a bounded! macro to create bounded values and pass
> those to a single unified setter, making it a unified API for both constants
> and runtime values. Let us not use const generics just for the sake of it or
> create special const APIs that no one but examples use!!!
>
> For example, instead of having separate set_/with_ prefixes, we could have:
>
>     boot0
>         .with_major_revision(bounded!(u8, 3))
>         .with_minor_revision(bounded!(u8, 10))
>         .with_vendor_id(obtain_vendor_id())
>
> This keeps the syntax clean while still providing compile-time bounds
> checking for constants. A single unified setter API is way cleaner and less
> confusing than having set_ for runtime and with_<N>() for compile-time
> values.
>
> Is there some reason why this will not work?

So these setters are really part of the `bitfield!` API. Bitfields are,
at the end of the day, just integers which we will very likely want to
declare constants of out of individual const field values. This can only
be done by using const methods, and a const `Bounded` needs to validate
its constraints at build time, which requires the
`Bounded::new::<VALUE>()` constructor, and by transition
similarly-shaped setters to set fields at const time.

  reply	other threads:[~2026-01-28  7:42 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-28  2:37 [PATCH v4 0/7] rust: add `register!` macro Alexandre Courbot
2026-01-28  2:37 ` [PATCH v4 1/7] rust: enable the `generic_arg_infer` feature Alexandre Courbot
2026-01-28  2:37 ` [PATCH v4 2/7] rust: num: add `shr` and `shl` methods to `Bounded` Alexandre Courbot
2026-01-28 15:38   ` Gary Guo
2026-01-28  2:37 ` [PATCH v4 3/7] rust: num: add `as_bool` method to `Bounded<_, 1>` Alexandre Courbot
2026-01-28  2:37 ` [PATCH v4 4/7] rust: num: add `into_inner` method to `Bounded` Alexandre Courbot
2026-01-28 15:43   ` Gary Guo
2026-01-29  8:05     ` Alexandre Courbot
2026-01-29 20:23       ` Gary Guo
2026-01-30  0:58         ` Alexandre Courbot
2026-01-28  2:37 ` [PATCH v4 5/7] rust: io: add `register!` macro Alexandre Courbot
2026-01-28  3:02   ` John Hubbard
2026-01-28  3:47     ` Joel Fernandes
2026-01-28  7:42       ` Alexandre Courbot [this message]
2026-01-28 17:56         ` Joel Fernandes
2026-01-29 11:59           ` Alexandre Courbot
2026-01-28 16:16   ` Gary Guo
2026-01-29  8:00     ` Alexandre Courbot
2026-01-29 14:10       ` Gary Guo
2026-01-29 21:08         ` Danilo Krummrich
2026-01-30  6:55         ` Alexandre Courbot
2026-01-30 16:14           ` Gary Guo
2026-01-30 16:44             ` Danilo Krummrich
2026-01-30 17:01               ` Gary Guo
2026-01-30 17:18                 ` Danilo Krummrich
2026-01-29 12:48     ` Danilo Krummrich
2026-01-28  2:37 ` [PATCH v4 6/7] sample: rust: pci: use " Alexandre Courbot
2026-01-28 12:35   ` Zhi Wang
2026-01-28 13:27     ` Alexandre Courbot
2026-01-28 15:46       ` Gary Guo
2026-01-29  8:01         ` Alexandre Courbot
2026-01-31  1:06   ` Danilo Krummrich
2026-01-28  2:37 ` [PATCH FOR REFERENCE v4 7/7] gpu: nova-core: use the kernel " Alexandre Courbot
2026-01-28  2:57   ` John Hubbard

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=DG01XSMD0VL7.2LN9LJPH57FFW@nvidia.com \
    --to=acourbot@nvidia.com \
    --cc=a.hindborg@kernel.org \
    --cc=aliceryhl@google.com \
    --cc=apopple@nvidia.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dakr@kernel.org \
    --cc=daniel.almeida@collabora.com \
    --cc=dirk.behme@de.bosch.com \
    --cc=ecourtney@nvidia.com \
    --cc=epeer@nvidia.com \
    --cc=gary@garyguo.net \
    --cc=jhubbard@nvidia.com \
    --cc=joelagnelf@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lossin@kernel.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=steven.price@arm.com \
    --cc=tmgross@umich.edu \
    --cc=ttabi@nvidia.com \
    --cc=yury.norov@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