From: Danilo Krummrich <dakr@kernel.org>
To: Benno Lossin <benno.lossin@proton.me>
Cc: Greg KH <gregkh@linuxfoundation.org>,
bhelgaas@google.com, rafael@kernel.org, ojeda@kernel.org,
alex.gaynor@gmail.com, boqun.feng@gmail.com, gary@garyguo.net,
bjorn3_gh@protonmail.com, a.hindborg@kernel.org,
aliceryhl@google.com, tmgross@umich.edu,
linux-pci@vger.kernel.org, rust-for-linux@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 2/3] rust: pci: impl TryFrom<&Device> for &pci::Device
Date: Tue, 1 Apr 2025 15:51:44 +0200 [thread overview]
Message-ID: <Z-vvcPfgyaRdd0xQ@pollux> (raw)
In-Reply-To: <D8OPMRYE0SO5.2JQD6ZIYXHP68@proton.me>
On Mon, Mar 24, 2025 at 06:32:53PM +0000, Benno Lossin wrote:
> On Mon Mar 24, 2025 at 7:13 PM CET, Danilo Krummrich wrote:
> > On Mon, Mar 24, 2025 at 05:36:45PM +0000, Benno Lossin wrote:
> >> On Mon Mar 24, 2025 at 5:49 PM CET, Danilo Krummrich wrote:
> >> > On Mon, Mar 24, 2025 at 04:39:25PM +0000, Benno Lossin wrote:
> >> >> On Sun Mar 23, 2025 at 11:10 PM CET, Danilo Krummrich wrote:
> >> >> > On Sat, Mar 22, 2025 at 11:10:57AM +0100, Danilo Krummrich wrote:
> >> >> >> On Fri, Mar 21, 2025 at 08:25:07PM -0700, Greg KH wrote:
> >> >> >> > Along these lines, if you can convince me that this is something that we
> >> >> >> > really should be doing, in that we should always be checking every time
> >> >> >> > someone would want to call to_pci_dev(), that the return value is
> >> >> >> > checked, then why don't we also do this in C if it's going to be
> >> >> >> > something to assure people it is going to be correct? I don't want to
> >> >> >> > see the rust and C sides get "out of sync" here for things that can be
> >> >> >> > kept in sync, as that reduces the mental load of all of us as we travers
> >> >> >> > across the boundry for the next 20+ years.
> >> >> >>
> >> >> >> I think in this case it is good when the C and Rust side get a bit
> >> >> >> "out of sync":
> >> >> >
> >> >> > A bit more clarification on this:
> >> >> >
> >> >> > What I want to say with this is, since we can cover a lot of the common cases
> >> >> > through abstractions and the type system, we're left with the not so common
> >> >> > ones, where the "upcasts" are not made in the context of common and well
> >> >> > established patterns, but, for instance, depend on the semantics of the driver;
> >> >> > those should not be unsafe IMHO.
> >> >>
> >> >> I don't think that we should use `TryFrom` for stuff that should only be
> >> >> used seldomly. A function that we can document properly is a much better
> >> >> fit, since we can point users to the "correct" API.
> >> >
> >> > Most of the cases where drivers would do this conversion should be covered by
> >> > the abstraction to already provide that actual bus specific device, rather than
> >> > a generic one or some priv pointer, etc.
> >> >
> >> > So, the point is that the APIs we design won't leave drivers with a reason to
> >> > make this conversion in the first place. For the cases where they have to
> >> > (which should be rare), it's the right thing to do. There is not an alternative
> >> > API to point to.
> >>
> >> Yes, but for such a case, I wouldn't want to use `TryFrom`, since that
> >> trait to me is a sign of a canonical way to convert a value.
> >
> > Well, it is the canonical way to convert, it's just that by the design of other
> > abstractions drivers should very rarely get in the situation of needing it in
> > the first place.
>
> I'd still prefer it though, since one can spot a
>
> let dev = CustomDevice::checked_from(dev)?
>
> much better in review than the `try_from` conversion. It also prevents
> one from giving it to a generic interface expecting the `TryFrom` trait.
(I plan to rebase this on my series introducing the Bound device context [1].)
I thought about this for a while and I still think TryFrom is fine here.
At some point I want to replace this implementation with a macro, since the code
is pretty similar for bus specific devices. I think that's a bit cleaner with
TryFrom compared to with a custom method, since we'd need the bus specific
device to call the macro from the generic impl, i.e.
impl<Ctx: DeviceContext> Device<Ctx>
rather than a specific one, which we can't control. We can control it for
TryFrom though.
However, I also do not really object to your proposal, hence I'm willing to make
the change.
Do you want to make a proposal for the corresponding doc comment switching to a
custom method?
[1] https://lore.kernel.org/lkml/20250331202805.338468-1-dakr@kernel.org/
next prev parent reply other threads:[~2025-04-01 13:51 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-21 21:47 [PATCH v4 0/3] Implement TryFrom<&Device> for bus specific devices Danilo Krummrich
2025-03-21 21:47 ` [PATCH v4 1/3] rust: device: implement bus_type_raw() Danilo Krummrich
2025-03-22 3:10 ` Greg KH
2025-03-21 21:47 ` [PATCH v4 2/3] rust: pci: impl TryFrom<&Device> for &pci::Device Danilo Krummrich
2025-03-22 3:25 ` Greg KH
2025-03-22 10:10 ` Danilo Krummrich
2025-03-23 22:10 ` Danilo Krummrich
2025-03-24 13:54 ` Greg KH
2025-03-24 17:05 ` Danilo Krummrich
2025-03-24 16:39 ` Benno Lossin
2025-03-24 16:49 ` Danilo Krummrich
2025-03-24 17:36 ` Benno Lossin
2025-03-24 18:13 ` Danilo Krummrich
2025-03-24 18:32 ` Benno Lossin
2025-04-01 13:51 ` Danilo Krummrich [this message]
2025-04-02 0:05 ` Benno Lossin
2025-04-02 9:06 ` Danilo Krummrich
2025-03-21 21:47 ` [PATCH v4 3/3] rust: platform: impl TryFrom<&Device> for &platform::Device Danilo Krummrich
2025-03-22 3:25 ` Greg KH
2025-04-19 12:57 ` [PATCH v4 0/3] Implement TryFrom<&Device> for bus specific devices Danilo Krummrich
-- strict thread matches above, loose matches on Subject: below --
2025-04-07 15:52 [PATCH v4 2/3] rust: pci: impl TryFrom<&Device> for &pci::Device Benno Lossin
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=Z-vvcPfgyaRdd0xQ@pollux \
--to=dakr@kernel.org \
--cc=a.hindborg@kernel.org \
--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=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=rafael@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--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.