All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Benno Lossin" <lossin@kernel.org>
To: "FUJITA Tomonori" <fujita.tomonori@gmail.com>
Cc: <ansuelsmth@gmail.com>, <andrew+netdev@lunn.ch>,
	<davem@davemloft.net>, <edumazet@google.com>, <kuba@kernel.org>,
	<pabeni@redhat.com>, <robh@kernel.org>, <krzk+dt@kernel.org>,
	<conor+dt@kernel.org>, <hkallweit1@gmail.com>,
	<linux@armlinux.org.uk>, <florian.fainelli@broadcom.com>,
	<bcm-kernel-feedback-list@broadcom.com>, <kabel@kernel.org>,
	<andrei.botila@oss.nxp.com>, <tmgross@umich.edu>,
	<ojeda@kernel.org>, <alex.gaynor@gmail.com>,
	<boqun.feng@gmail.com>, <gary@garyguo.net>,
	<bjorn3_gh@protonmail.com>, <benno.lossin@proton.me>,
	<a.hindborg@kernel.org>, <aliceryhl@google.com>,
	<dakr@kernel.org>, <sd@queasysnail.net>, <michael@fossekall.de>,
	<daniel@makrotopia.org>, <netdev@vger.kernel.org>,
	<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<rust-for-linux@vger.kernel.org>
Subject: Re: [net-next PATCH v10 7/7] rust: net::phy sync with match_phy_device C changes
Date: Sat, 17 May 2025 10:06:13 +0200	[thread overview]
Message-ID: <D9YA4FS5EX4S.217A1IK0WW4WR@kernel.org> (raw)
In-Reply-To: <20250517.152735.1375764560545086525.fujita.tomonori@gmail.com>

On Sat May 17, 2025 at 8:27 AM CEST, FUJITA Tomonori wrote:
> On Fri, 16 May 2025 22:16:23 +0200
> "Benno Lossin" <lossin@kernel.org> wrote:
>> On Fri May 16, 2025 at 5:12 PM CEST, Christian Marangi wrote:
>>> On Fri, May 16, 2025 at 04:48:53PM +0200, Benno Lossin wrote:
>>>> On Fri May 16, 2025 at 2:30 PM CEST, FUJITA Tomonori wrote:
>>>> > On Thu, 15 May 2025 13:27:12 +0200
>>>> > Christian Marangi <ansuelsmth@gmail.com> wrote:
>>>> >> @@ -574,6 +577,23 @@ pub const fn create_phy_driver<T: Driver>() -> DriverVTable {
>>>> >>  /// This trait is used to create a [`DriverVTable`].
>>>> >>  #[vtable]
>>>> >>  pub trait Driver {
>>>> >> +    /// # Safety
>>>> >> +    ///
>>>> >> +    /// For the duration of `'a`,
>>>> >> +    /// - the pointer must point at a valid `phy_driver`, and the caller
>>>> >> +    ///   must be in a context where all methods defined on this struct
>>>> >> +    ///   are safe to call.
>>>> >> +    unsafe fn from_raw<'a>(ptr: *const bindings::phy_driver) -> &'a Self
>>>> >> +    where
>>>> >> +        Self: Sized,
>>>> >> +    {
>>>> >> +        // CAST: `Self` is a `repr(transparent)` wrapper around `bindings::phy_driver`.
>>>> >> +        let ptr = ptr.cast::<Self>();
>>>> >> +        // SAFETY: by the function requirements the pointer is valid and we have unique access for
>>>> >> +        // the duration of `'a`.
>>>> >> +        unsafe { &*ptr }
>>>> >> +    }
>>>> >
>>>> > We might need to update the comment. phy_driver is const so I think
>>>> > that we can access to it any time.
>>>> 
>>>> Why is any type implementing `Driver` a transparent wrapper around
>>>> `bindings::phy_driver`?
>>>> 
>>>
>>> Is this referred to a problem with using from_raw or more of a general
>>> question on how the rust wrapper are done for phy code?
>> 
>> I looked at the `phy.rs` file again and now I'm pretty sure the above
>> code is wrong. `Self` can be implemented on any type (even types like
>> `Infallible` that do not have any valid bit patterns, since it's an
>> empty enum). The abstraction for `bindings::phy_driver` is
>> `DriverVTable` not an object of type `Self`, so you should cast to that
>> pointer instead.
>
> Yeah.
>
> I don't want to delay this patchset due to Rust side changes so
> casting a pointer to bindings::phy_driver to DriverVTable is ok but
> the following signature doesn't look useful for Rust phy drivers:
>
> fn match_phy_device(_dev: &mut Device, _drv: &DriverVTable) -> bool
>
> struct DriverVTable is only used to create an array of
> bindings::phy_driver for C side, and it doesn't provide any
> information to the Rust driver.

Yeah, but we could add accessor functions that provide that information.
Although that doesn't really make sense at the moment, see below.

> In match_phy_device(), for example, a device driver accesses to
> PHY_DEVICE_ID, which the Driver trait provides. I think we need to
> create an instance of the device driver's own type that implements the
> Driver trait and make it accessible.

I think that's wrong, nothing stops me from implementing `Driver` for an
empty enum and that can't be instantiated. The reason that one wants to
have this in C is because the same `match` function is used for
different drivers (or maybe devices? I'm not too familiar with the
terminology). In Rust, you must implement the match function for a
single PHY_DEVICE_ID only, so maybe we don't need to change the
signature at all?

---
Cheers,
Benno

  reply	other threads:[~2025-05-17  8:06 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-15 11:27 [net-next PATCH v10 0/7] net: phy: Add support for new Aeonsemi PHYs Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 1/7] net: phy: pass PHY driver to .match_phy_device OP Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 2/7] net: phy: bcm87xx: simplify " Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 3/7] net: phy: nxp-c45-tja11xx: " Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 4/7] net: phy: introduce genphy_match_phy_device() Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 5/7] net: phy: Add support for Aeonsemi AS21xxx PHYs Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 6/7] dt-bindings: net: Document support for Aeonsemi PHYs Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 7/7] rust: net::phy sync with match_phy_device C changes Christian Marangi
2025-05-15 11:49   ` Benno Lossin
2025-05-15 11:51     ` Christian Marangi
2025-05-15 12:01       ` Benno Lossin
2025-05-16 11:56   ` kernel test robot
2025-05-16 12:30   ` FUJITA Tomonori
2025-05-16 14:48     ` Benno Lossin
2025-05-16 15:12       ` Christian Marangi
2025-05-16 20:16         ` Benno Lossin
2025-05-17  6:27           ` FUJITA Tomonori
2025-05-17  8:06             ` Benno Lossin [this message]
2025-05-17 13:13               ` FUJITA Tomonori
2025-05-17 19:02                 ` Benno Lossin
2025-05-17 20:09                   ` Christian Marangi
2025-05-18  7:13                     ` Benno Lossin
2025-05-19 12:00                   ` FUJITA Tomonori
2025-05-19 12:32                     ` Benno Lossin
2025-05-19 12:44                       ` FUJITA Tomonori
2025-05-19 12:51                         ` Benno Lossin
2025-05-19 12:58                           ` FUJITA Tomonori
2025-05-16 15:10     ` Christian Marangi

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=D9YA4FS5EX4S.217A1IK0WW4WR@kernel.org \
    --to=lossin@kernel.org \
    --cc=a.hindborg@kernel.org \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=andrei.botila@oss.nxp.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=ansuelsmth@gmail.com \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=benno.lossin@proton.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=conor+dt@kernel.org \
    --cc=dakr@kernel.org \
    --cc=daniel@makrotopia.org \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=edumazet@google.com \
    --cc=florian.fainelli@broadcom.com \
    --cc=fujita.tomonori@gmail.com \
    --cc=gary@garyguo.net \
    --cc=hkallweit1@gmail.com \
    --cc=kabel@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=michael@fossekall.de \
    --cc=netdev@vger.kernel.org \
    --cc=ojeda@kernel.org \
    --cc=pabeni@redhat.com \
    --cc=robh@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=sd@queasysnail.net \
    --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.