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: Thu, 29 Jan 2026 20:59:04 +0900 [thread overview]
Message-ID: <DG120QJCVQDS.1E3ZZ4IVVU8Q2@nvidia.com> (raw)
In-Reply-To: <20260128175605.GA2175960@joelbox2>
On Thu Jan 29, 2026 at 2:56 AM JST, Joel Fernandes wrote:
> On Wed, 28 Jan 2026, Alexandre Courbot wrote:
>> 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.
>
> I think you run into that issue because the setter requires to do `.into()`
> to do the bounded conversion.
Precisely. Without that conversion, the public field setter could just
forward to the private one, which is const.
>
> If we accept Bounded type in the setter directly instead, it
> should allow to keep the API simple. The advantage is it keeps the API naming
> simple. with_<field>() which accepts Bounded type, that's the contract. The
> trade off is the call-site can be a bit more icky but I wonder how much of an
> issue that really is (it really depends on usage).
I have tried converting the current macro to this idea, and this results
in quite a few `.into()` calls. Notably, I find the following a bit (pun
intended) annoying:
r.with_start(true.into())
`start` is a 1-bit bitfield, so it should accept a boolean, but here we
cannot pass it directly.
So I am not sure that I prefer this over the current generic argument.
In any case, this exercice has revealed that even if we adopt this idea,
the issue won't be entirely solved because of the `=>` and `?=>` field
conversions.
For such fields, performing an `into()` or `try_into()` is mandatory, as
that's how the argument is converted to the Bounded internally. So
pursuing const-purity at the moment is futile anyway, at least until we
get const trait methods.
Which leaves the original problem: how do we avoid invoking the awkward
`Bounded` constructor for const field values. And AFAICT, taking the
`Bounded` directly still requires us to build it, which requires us to
specify the backing type explicitly as that's the only way for the
compiler to know which constructor to call. So in terms of API
convenience I guess the `with_`/`with_const_` combo remains the best bet
for now.
>
> I wrote a simple program to confirm the same function will work for both const
> and non-const parameters. Actually the caller does not even need to specific
> the bounded int size at the call site, it gets inferred. So we don't even need
> a bounded! macro.
>
> struct Bounded<const BITS: u32>(u32);
For this example yes, because you have hardcoded the `Bounded` to be
32 bits, but I have tested this against the version in the kernel and it
still requires the fully-specified constructor.
next prev parent reply other threads:[~2026-01-29 11:59 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
2026-01-28 17:56 ` Joel Fernandes
2026-01-29 11:59 ` Alexandre Courbot [this message]
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=DG120QJCVQDS.1E3ZZ4IVVU8Q2@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