From: Danilo Krummrich <dakr@kernel.org>
To: Rob Herring <robh@kernel.org>
Cc: gregkh@linuxfoundation.org, rafael@kernel.org,
bhelgaas@google.com, ojeda@kernel.org, alex.gaynor@gmail.com,
boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com,
benno.lossin@proton.me, tmgross@umich.edu,
a.hindborg@samsung.com, aliceryhl@google.com, airlied@gmail.com,
fujita.tomonori@gmail.com, lina@asahilina.net,
pstanner@redhat.com, ajanulgu@redhat.com, lyude@redhat.com,
daniel.almeida@collabora.com, saravanak@google.com,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v3 15/16] rust: platform: add basic platform device / driver abstractions
Date: Tue, 26 Nov 2024 21:01:04 +0100 [thread overview]
Message-ID: <Z0YpAMz4RlWwc9Zq@pollux> (raw)
In-Reply-To: <CAL_JsqLohzzxDrJPFiQ6v8X=2i7pPUJdwzVLxShbcX-SCz_3Jg@mail.gmail.com>
On Tue, Nov 26, 2024 at 01:15:59PM -0600, Rob Herring wrote:
> On Tue, Nov 26, 2024 at 9:17 AM Danilo Krummrich <dakr@kernel.org> wrote:
> >
> > On Tue, Nov 26, 2024 at 08:44:19AM -0600, Rob Herring wrote:
> > > > > > > The DT type and name fields are pretty much legacy, so I don't think the
> > > > > > > rust bindings need to worry about them until someone converts Sparc and
> > > > > > > PowerMac drivers to rust (i.e. never).
> > > > > > >
> > > > > > > I would guess the PCI cases might be questionable, too. Like DT, drivers
> > > > > > > may be accessing the table fields, but that's not best practice. All the
> > > > > > > match fields are stored in pci_dev, so why get them from the match
> > > > > > > table?
> > > > > >
> > > > > > Fair question, I'd like to forward it to Greg. IIRC, he explicitly requested to
> > > > > > make the corresponding struct pci_device_id available in probe() at Kangrejos.
> > >
> > > Making it available is not necessarily the same thing as passing it in
> > > via probe.
> >
> > IIRC, that was exactly the request.
> >
> > > I agree it may need to be available in probe(), but that
> > > can be an explicit call to get it.
> >
> > Sure, I did exactly that for the platform abstraction, because there we may
> > probe through different ID tables.
>
> TBC, I think of_match_device() (both calling the C API and the method)
> should not be part of this series. I think we agreed on that already.
> Only if there is a need at some point later should we add it.
That matches my understanding.
>
> > A `struct pci_driver`'s probe function has the following signature [1] though:
> >
> > `int (*probe)(struct pci_dev *dev, const struct pci_device_id *id)`
> >
> > [1] https://elixir.bootlin.com/linux/v6.12/source/include/linux/pci.h#L950
>
> We have a mixture of probe with and without the _device_id parameter.
> I'd question if we really want to keep that for PCI when we have a
> chance to align things with Rust. We can't really with C as it would
> be too many drivers to change. Passing the _device_id only works if
> firmware matching is never used which can change over time. But if
> aligning things is not something we want to do, then I'll shut up.
I don't disagree. Again, this one is on Greg to comment on. Personally, I'm
fine with both.
>
> > > > > Which table gets passed in though? Is the IdInfo parameter generic and
> > > > > can be platform_device_id, of_device_id or acpi_device_id? Not sure if
> > > > > that's possible in rust or not.
> > > >
> > > > Not sure I can follow you here.
> > > >
> > > > The `IdInfo` parameter is of a type given by the driver for driver specific data
> > > > for a certain ID table entry.
> > > >
> > > > It's analogue to resolving `pci_device_id::driver_data` in C.
> > >
> > > As I said below, the PCI case is simpler than for platform devices.
> > > Platform devices have 3 possible match tables. The *_device_id type we
> > > end up with is determined at runtime (because matching is done at
> > > runtime), so IdInfo could be any of those 3 types.
> >
> > `IdInfo` is *not* any of the three *_device_id types. It's the type of the
> > drivers private data associated with an entry of any of the three ID tables.
>
> Ah yes, indeed. So no issue with the probe method.
>
> > It is true that a driver, which registers multiple out of those three tables is
> > currently forced to have the same private data type for all of them.
>
> I think that's a feature actually as it enforces best practices.
Agreed.
>
> > I don't think this is a concern, is it? If so, it's easily resolvable by just
> > adding two more associated types, e.g. `PlatformIdInfo`, `DtIdInfo` and
> > `AcpiIdInfo`.
> >
> > In this case we would indeed need accessor functions like `dt_match_data`,
> > `platform_match_data`, `acpi_match_data`, since we don't know the type at
> > compile time anymore.
>
> Do we need to split those out in rust or can we just call
> device_get_match_data()?
We'd need to split them, because they potentially would return different types.
(Again, I don't think that's necessary though.)
For C it's just a void pointer, so we don't bother there, but in Rust we'd want
it type safe.
>
> >
> > I don't think that's necessary though.
>
> Even if you don't support all 3 tables now, at a minimum I think you
> need to rename things to be clear what table type is supported and
> allow for adding the other types. For example, T::ID_TABLE needs to be
> renamed to be clear it's the of_device_id table.
Sure, I already got this on my list of changes for the next version.
>
> Rob
>
next prev parent reply other threads:[~2024-11-26 20:01 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-22 21:31 [PATCH v3 00/16] Device / Driver PCI / Platform Rust abstractions Danilo Krummrich
2024-10-22 21:31 ` [PATCH v3 01/16] rust: init: introduce `Opaque::try_ffi_init` Danilo Krummrich
2024-10-29 12:42 ` Alice Ryhl
2024-10-22 21:31 ` [PATCH v3 02/16] rust: introduce `InPlaceModule` Danilo Krummrich
2024-10-29 12:45 ` Alice Ryhl
2024-11-04 0:15 ` Greg KH
2024-11-04 17:36 ` Miguel Ojeda
2024-10-22 21:31 ` [PATCH v3 03/16] rust: pass module name to `Module::init` Danilo Krummrich
2024-10-29 12:55 ` Alice Ryhl
2024-10-22 21:31 ` [PATCH v3 04/16] rust: implement generic driver registration Danilo Krummrich
2024-10-22 21:31 ` [PATCH v3 05/16] rust: implement `IdArray`, `IdTable` and `RawDeviceId` Danilo Krummrich
2024-11-25 13:42 ` Miguel Ojeda
2024-10-22 21:31 ` [PATCH v3 06/16] rust: add rcu abstraction Danilo Krummrich
2024-10-29 13:59 ` Alice Ryhl
2024-10-22 21:31 ` [PATCH v3 07/16] rust: add `Revocable` type Danilo Krummrich
2024-10-29 13:26 ` Alice Ryhl
2024-12-03 9:21 ` Danilo Krummrich
2024-12-03 9:24 ` Alice Ryhl
2024-12-03 9:35 ` Danilo Krummrich
2024-12-03 10:58 ` Alice Ryhl
2024-10-22 21:31 ` [PATCH v3 08/16] rust: add `dev_*` print macros Danilo Krummrich
2024-11-04 0:24 ` Greg KH
2024-10-22 21:31 ` [PATCH v3 09/16] rust: add `io::Io` base type Danilo Krummrich
2024-10-28 15:43 ` Alice Ryhl
2024-10-29 9:20 ` Danilo Krummrich
2024-10-29 10:18 ` Alice Ryhl
2024-11-06 23:44 ` Daniel Almeida
2024-11-06 23:31 ` Daniel Almeida
2024-10-22 21:31 ` [PATCH v3 10/16] rust: add devres abstraction Danilo Krummrich
2024-10-31 14:03 ` Alice Ryhl
2024-11-27 12:21 ` Alice Ryhl
2024-11-27 13:19 ` Danilo Krummrich
2024-11-27 13:20 ` Alice Ryhl
2024-10-22 21:31 ` [PATCH v3 11/16] rust: pci: add basic PCI device / driver abstractions Danilo Krummrich
2024-10-27 22:42 ` Boqun Feng
2024-10-28 10:21 ` Danilo Krummrich
2024-11-26 14:06 ` Danilo Krummrich
2024-10-29 21:16 ` Christian Schrefl
2024-10-22 21:31 ` [PATCH v3 12/16] rust: pci: implement I/O mappable `pci::Bar` Danilo Krummrich
2024-10-22 21:31 ` [PATCH v3 13/16] samples: rust: add Rust PCI sample driver Danilo Krummrich
2024-10-23 15:57 ` Rob Herring
2024-10-28 13:22 ` Danilo Krummrich
2024-10-22 21:31 ` [PATCH v3 14/16] rust: of: add `of::DeviceId` abstraction Danilo Krummrich
2024-10-22 23:03 ` Rob Herring
2024-10-23 6:33 ` Danilo Krummrich
2024-10-27 4:38 ` Fabien Parent
2024-10-29 13:37 ` Alice Ryhl
2024-10-22 21:31 ` [PATCH v3 15/16] rust: platform: add basic platform device / driver abstractions Danilo Krummrich
2024-10-22 23:47 ` Rob Herring
2024-10-23 6:44 ` Danilo Krummrich
2024-10-23 14:23 ` Rob Herring
2024-10-28 10:15 ` Danilo Krummrich
2024-10-30 12:23 ` Rob Herring
2024-11-26 12:39 ` Danilo Krummrich
2024-11-26 14:44 ` Rob Herring
2024-11-26 15:17 ` Danilo Krummrich
2024-11-26 19:15 ` Rob Herring
2024-11-26 20:01 ` Danilo Krummrich [this message]
2024-10-24 9:11 ` Dirk Behme
2024-10-28 10:19 ` Danilo Krummrich
2024-10-29 7:20 ` Dirk Behme
2024-10-29 8:50 ` Danilo Krummrich
2024-10-29 9:19 ` Dirk Behme
2024-10-29 9:50 ` Danilo Krummrich
2024-10-29 9:55 ` Danilo Krummrich
2024-10-29 10:08 ` Dirk Behme
2024-10-30 13:18 ` Rob Herring
2024-10-27 4:32 ` Fabien Parent
2024-10-28 13:44 ` Dirk Behme
2024-10-29 13:16 ` Alice Ryhl
2024-10-30 15:50 ` Alice Ryhl
2024-10-30 18:07 ` Danilo Krummrich
2024-10-31 8:23 ` Alice Ryhl
2024-11-26 14:13 ` Danilo Krummrich
2024-12-04 19:25 ` Daniel Almeida
2024-12-04 19:30 ` Danilo Krummrich
2024-10-22 21:31 ` [PATCH v3 16/16] samples: rust: add Rust platform sample driver Danilo Krummrich
2024-10-23 0:04 ` Rob Herring
2024-10-23 6:59 ` Danilo Krummrich
2024-10-23 15:37 ` Rob Herring
2024-10-28 9:32 ` Danilo Krummrich
2024-10-25 10:32 ` Dirk Behme
2024-10-25 16:08 ` Rob Herring
2024-10-23 5:13 ` [PATCH v3 00/16] Device / Driver PCI / Platform Rust abstractions Greg KH
2024-10-23 7:28 ` Danilo Krummrich
2024-10-25 5:15 ` Dirk Behme
2024-11-16 14:32 ` Janne Grunau
2024-11-16 14:50 ` Greg KH
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=Z0YpAMz4RlWwc9Zq@pollux \
--to=dakr@kernel.org \
--cc=a.hindborg@samsung.com \
--cc=airlied@gmail.com \
--cc=ajanulgu@redhat.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bhelgaas@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=daniel.almeida@collabora.com \
--cc=devicetree@vger.kernel.org \
--cc=fujita.tomonori@gmail.com \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=lina@asahilina.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lyude@redhat.com \
--cc=ojeda@kernel.org \
--cc=pstanner@redhat.com \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=saravanak@google.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.