From: "Benno Lossin" <lossin@kernel.org>
To: "Christian Marangi" <ansuelsmth@gmail.com>,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Russell King" <linux@armlinux.org.uk>,
"Florian Fainelli" <florian.fainelli@broadcom.com>,
"Broadcom internal kernel review list"
<bcm-kernel-feedback-list@broadcom.com>,
"Marek Behún" <kabel@kernel.org>,
"Andrei Botila" <andrei.botila@oss.nxp.com>,
"FUJITA Tomonori" <fujita.tomonori@gmail.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Danilo Krummrich" <dakr@kernel.org>,
"Sabrina Dubroca" <sd@queasysnail.net>,
"Michael Klein" <michael@fossekall.de>,
"Daniel Golle" <daniel@makrotopia.org>,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org
Cc: "Russell King (Oracle)" <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 10:09:53 +0200 [thread overview]
Message-ID: <D9YA78RFVQMH.QPUFXMHSVU7V@kernel.org> (raw)
In-Reply-To: <20250516212354.32313-2-ansuelsmth@gmail.com>
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`.
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).
---
Cheers,
Benno
> +
> /// Defines certain other features this PHY supports.
> /// It is a combination of the flags in the [`flags`] module.
> const FLAGS: u32 = 0;
> @@ -602,7 +618,7 @@ fn get_features(_dev: &mut Device) -> Result {
>
> /// Returns true if this is a suitable driver for the given phydev.
> /// If not implemented, matching is based on [`Driver::PHY_DEVICE_ID`].
> - fn match_phy_device(_dev: &Device) -> bool {
> + fn match_phy_device(_dev: &mut Device, _drv: &DriverVTable) -> bool {
> false
> }
>
next prev parent reply other threads:[~2025-05-17 8:10 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 [this message]
2025-05-17 13:28 ` FUJITA Tomonori
2025-05-17 20:05 ` Christian Marangi
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=D9YA78RFVQMH.QPUFXMHSVU7V@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=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.