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: "Danilo Krummrich" <dakr@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Miguel Ojeda" <ojeda@kernel.org>, "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>,
	"Boqun Feng" <boqun@kernel.org>,
	"Yury Norov" <yury.norov@gmail.com>,
	"John Hubbard" <jhubbard@nvidia.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 FOR REFERENCE v8 10/10] gpu: nova-core: use the kernel `register!` macro
Date: Tue, 10 Mar 2026 11:18:26 +0900	[thread overview]
Message-ID: <DGYQPYIZ6NG9.2WSCVV1RMLYXH@nvidia.com> (raw)
In-Reply-To: <3f0329e0-6718-4a5a-958d-4a8fa263e879@nvidia.com>

On Tue Mar 10, 2026 at 12:43 AM JST, Joel Fernandes wrote:
>
> On 3/9/2026 11:14 AM, Alexandre Courbot wrote:
>>
>> @@ -797,26 +792,30 @@ pub(crate) fn start(&self, bar: &Bar0) -> Result<()> {
>>      /// Writes values to the mailbox registers if provided.
>>      pub(crate) fn write_mailboxes(&self, bar: &Bar0, mbox0: Option<u32>, mbox1: Option<u32>) {
>>          if let Some(mbox0) = mbox0 {
>> -            regs::NV_PFALCON_FALCON_MAILBOX0::default()
>> -                .set_value(mbox0)
>> -                .write(bar, &E::ID);
>> +            bar.write(
>> +                WithBase::of::<E>(),
>> +                regs::NV_PFALCON_FALCON_MAILBOX0::zeroed().with_value(mbox0),
>> +            );
>>          }
>>  
>>          if let Some(mbox1) = mbox1 {
>> -            regs::NV_PFALCON_FALCON_MAILBOX1::default()
>> -                .set_value(mbox1)
>> -                .write(bar, &E::ID);
>> +            bar.write(
>> +                WithBase::of::<E>(),
>> +                regs::NV_PFALCON_FALCON_MAILBOX1::zeroed().with_value(mbox1),
>> +            );
>>          }
>>      }
>
> TBH, this is quite a readability hit, the previous was much more readable IMHO.
>
> Why doesn't the previous caller-side syntax still work?

Looking down the discussion is looks like almost everyone found a way to
work with this API that they like, but here are the reasons for the
record.

The previous caller-side syntax had many problems:

* Every register must have its own ~6 (try_)read/write/update methods
generated by the macro, creating a rift in how I/O is used only for
registers.
* The number of arguments these methods take is dependent on the
register type, which is awkward.
* The I/O type is passed as an argument, meaning we cannot use
Deref coercion on it, further complicating things when we have more than
one layer of indirection. For instance, it didn't work well with both
Nova and the Rust PCI driver sample (one of them had to `&` or `*` its
I/O type with every call).

With the current revision, there is only one site where I/O methods are
defined (io.rs), to which registers cleanly integrate like any other I/O
type (i.e. registers are not "special"). Deref coercion on the `Io` type
can be used without limitation. There is much less code generated by the
register macro, which has become much simpler as a result.

This syntax might require one more line here and there, but after
working with it a bit I think it is actually much more readable and
well-formatted than before. It makes it clear from the get go what kind
of register you are accessing, and we *do* want to be meticulous when
working with registers.

It looks better both on the inside and the outside, and I hold that view
not as an opinion, but an objective fact. :)

  parent reply	other threads:[~2026-03-10  2:22 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-09 15:13 [PATCH v8 00/10] rust: add `register!` macro Alexandre Courbot
2026-03-09 15:13 ` [PATCH v8 01/10] rust: enable the `generic_arg_infer` feature Alexandre Courbot
2026-03-11  0:13   ` Yury Norov
2026-03-11  6:16     ` Miguel Ojeda
2026-03-09 15:13 ` [PATCH v8 02/10] rust: num: add `shr` and `shl` methods to `Bounded` Alexandre Courbot
2026-03-11  0:26   ` Yury Norov
2026-03-09 15:14 ` [PATCH v8 03/10] rust: num: add `into_bool` method " Alexandre Courbot
2026-03-11  0:29   ` Yury Norov
2026-03-09 15:14 ` [PATCH v8 04/10] rust: num: make Bounded::get const Alexandre Courbot
2026-03-09 15:14 ` [PATCH v8 05/10] rust: io: add IoLoc type and generic I/O accessors Alexandre Courbot
2026-03-10 15:15   ` Danilo Krummrich
2026-03-09 15:14 ` [PATCH v8 06/10] rust: io: use generic read/write accessors for primitive accesses Alexandre Courbot
2026-03-09 15:29   ` Gary Guo
2026-03-10  1:57     ` Alexandre Courbot
2026-03-10  1:59       ` Alexandre Courbot
2026-03-10  2:04         ` Gary Guo
2026-03-10 15:17   ` Danilo Krummrich
2026-03-09 15:14 ` [PATCH v8 07/10] rust: io: introduce `IntoIoVal` trait and single-argument `write_val` Alexandre Courbot
2026-03-09 15:30   ` Gary Guo
2026-03-10  2:05     ` Alexandre Courbot
2026-03-10 16:34   ` Danilo Krummrich
2026-03-10 22:33     ` Gary Guo
2026-03-11 13:25       ` Danilo Krummrich
2026-03-11 13:42         ` Alexandre Courbot
2026-03-11 13:28     ` Alexandre Courbot
2026-03-11 14:56       ` Danilo Krummrich
2026-03-11 15:42         ` Gary Guo
2026-03-11 16:22           ` Danilo Krummrich
2026-03-11 17:16             ` Gary Guo
2026-03-12 13:53         ` Alexandre Courbot
2026-03-12 15:54           ` Danilo Krummrich
2026-03-14  1:19             ` Alexandre Courbot
2026-03-09 15:14 ` [PATCH v8 08/10] rust: io: add `register!` macro Alexandre Courbot
2026-03-10 16:39   ` Danilo Krummrich
2026-03-09 15:14 ` [PATCH v8 09/10] sample: rust: pci: use " Alexandre Courbot
2026-03-09 15:14 ` [PATCH FOR REFERENCE v8 10/10] gpu: nova-core: use the kernel " Alexandre Courbot
2026-03-09 15:43   ` Joel Fernandes
2026-03-09 17:34     ` John Hubbard
2026-03-09 17:51       ` Joel Fernandes
2026-03-09 18:01         ` John Hubbard
2026-03-09 18:28           ` Gary Guo
2026-03-09 18:34             ` John Hubbard
2026-03-09 18:42               ` Danilo Krummrich
2026-03-09 18:47                 ` John Hubbard
2026-03-09 18:42               ` Gary Guo
2026-03-09 18:50                 ` John Hubbard
2026-03-09 18:04       ` Danilo Krummrich
2026-03-09 18:06         ` John Hubbard
2026-03-10  2:18     ` Alexandre Courbot [this message]
2026-03-09 18:05 ` [PATCH v8 00/10] rust: add " John Hubbard
2026-03-09 21:08 ` Daniel Almeida
2026-03-10 17:20 ` Danilo Krummrich
2026-03-11 13:01   ` Alexandre Courbot
2026-03-11 13:07     ` Danilo Krummrich
2026-03-11 13:35       ` Alexandre Courbot
2026-03-11 13:38         ` Danilo Krummrich
2026-03-12  2:23           ` Alexandre Courbot

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=DGYQPYIZ6NG9.2WSCVV1RMLYXH@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@kernel.org \
    --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