From: Christian Marangi <ansuelsmth@gmail.com>
To: FUJITA Tomonori <fujita.tomonori@gmail.com>
Cc: lossin@kernel.org, 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,
rmk+kernel@armlinux.org.uk
Subject: Re: [net-next PATCH v11 1/6] net: phy: pass PHY driver to .match_phy_device OP
Date: Sat, 17 May 2025 22:05:13 +0200 [thread overview]
Message-ID: <6828ebfc.050a0220.7888.5e66@mx.google.com> (raw)
In-Reply-To: <20250517.222804.482303667530450320.fujita.tomonori@gmail.com>
On Sat, May 17, 2025 at 10:28:04PM +0900, FUJITA Tomonori wrote:
> On Sat, 17 May 2025 10:09:53 +0200
> "Benno Lossin" <lossin@kernel.org> wrote:
>
> > On Fri May 16, 2025 at 11:23 PM CEST, Christian Marangi wrote:
> >> diff --git a/rust/kernel/net/phy.rs b/rust/kernel/net/phy.rs
> >> index a59469c785e3..079a0f884887 100644
> >> --- a/rust/kernel/net/phy.rs
> >> +++ b/rust/kernel/net/phy.rs
> >> @@ -418,15 +418,18 @@ impl<T: Driver> Adapter<T> {
> >>
> >> /// # Safety
> >> ///
> >> - /// `phydev` must be passed by the corresponding callback in `phy_driver`.
> >> + /// `phydev` and `phydrv` must be passed by the corresponding callback in
> >> + // `phy_driver`.
> >> unsafe extern "C" fn match_phy_device_callback(
> >> phydev: *mut bindings::phy_device,
> >> + phydrv: *const bindings::phy_driver,
> >> ) -> crate::ffi::c_int {
> >> // SAFETY: This callback is called only in contexts
> >> // where we hold `phy_device->lock`, so the accessors on
> >> // `Device` are okay to call.
> >> let dev = unsafe { Device::from_raw(phydev) };
> >> - T::match_phy_device(dev) as i32
> >> + let drv = unsafe { T::from_raw(phydrv) };
> >> + T::match_phy_device(dev, drv) as i32
> >> }
> >>
> >> /// # Safety
> >> @@ -574,6 +577,19 @@ 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 DriverVTable {
> >> + // CAST: `DriverVTable` is a `repr(transparent)` wrapper around `bindings::phy_driver`.
> >> + let ptr = ptr.cast::<DriverVTable>();
> >> + // SAFETY: by the function requirements the pointer is const and is
> >> + // always valid to access for the duration of `'a`.
> >> + unsafe { &*ptr }
> >> + }
> >
> > If we go the way of supplying a `&DriverVTable` in the
> > `match_phy_device` function, then this should be a function in the impl
> > block of `DriverVTable` and not in `Driver`.
>
> Yeah.
>
> > See my reply to Fujita on the previous version, I don't think that we
> > need to add the `DriverVTable` to the `match_phy_device` function if we
> > don't provide accessor methods. Currently that isn't needed, so you only
> > need the hunks above this one. (I'd wait for Fujita's reply though).
>
> Agreed, to make DriverVTable actually useful in match_phy_device(),
> further changes would be needed. I think it's sufficient to simply
> make the Rust code compile, as shown in the patch below.
>
> I can take care of making sure Rust uses DriverVTable correctly later.
>
Thanks a lot, I'm sending new revision with the below change as
suggested.
> diff --git a/rust/kernel/net/phy.rs b/rust/kernel/net/phy.rs
> index a59469c785e3..32ea43ece646 100644
> --- a/rust/kernel/net/phy.rs
> +++ b/rust/kernel/net/phy.rs
> @@ -421,6 +421,7 @@ impl<T: Driver> Adapter<T> {
> /// `phydev` must be passed by the corresponding callback in `phy_driver`.
> unsafe extern "C" fn match_phy_device_callback(
> phydev: *mut bindings::phy_device,
> + _phydrv: *const bindings::phy_driver,
> ) -> crate::ffi::c_int {
> // SAFETY: This callback is called only in contexts
> // where we hold `phy_device->lock`, so the accessors on
--
Ansuel
next prev parent reply other threads:[~2025-05-17 20:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-16 21:23 [net-next PATCH v11 0/6] net: phy: Add support for new Aeonsemi PHYs Christian Marangi
2025-05-16 21:23 ` [net-next PATCH v11 1/6] net: phy: pass PHY driver to .match_phy_device OP Christian Marangi
2025-05-17 8:09 ` Benno Lossin
2025-05-17 13:28 ` FUJITA Tomonori
2025-05-17 20:05 ` Christian Marangi [this message]
2025-05-16 21:23 ` [net-next PATCH v11 2/6] net: phy: bcm87xx: simplify " Christian Marangi
2025-05-16 21:23 ` [net-next PATCH v11 3/6] net: phy: nxp-c45-tja11xx: " Christian Marangi
2025-05-16 21:23 ` [net-next PATCH v11 4/6] net: phy: introduce genphy_match_phy_device() Christian Marangi
2025-05-16 21:23 ` [net-next PATCH v11 5/6] net: phy: Add support for Aeonsemi AS21xxx PHYs Christian Marangi
2025-05-16 21:23 ` [net-next PATCH v11 6/6] dt-bindings: net: Document support for Aeonsemi PHYs 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=6828ebfc.050a0220.7888.5e66@mx.google.com \
--to=ansuelsmth@gmail.com \
--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=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=lossin@kernel.org \
--cc=michael@fossekall.de \
--cc=netdev@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=pabeni@redhat.com \
--cc=rmk+kernel@armlinux.org.uk \
--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.