From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Serge Semin <fancer.lancer@gmail.com>
Cc: Jose Abreu <Jose.Abreu@synopsys.com>,
Andrew Lunn <andrew@lunn.ch>, Conor Dooley <conor+dt@kernel.org>,
Tomer Maimon <tmaimon77@gmail.com>,
devicetree@vger.kernel.org, netdev@vger.kernel.org,
openbmc@lists.ozlabs.org,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Rob Herring <robh+dt@kernel.org>,
Maxime Chevallier <maxime.chevallier@bootlin.com>,
Eric Dumazet <edumazet@google.com>,
Jose Abreu <joabreu@synopsys.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
"David S. Miller" <davem@davemloft.net>,
linux-kernel@vger.kernel.org,
Heiner Kallweit <hkallweit1@gmail.com>
Subject: Re: [PATCH net-next 06/16] net: pcs: xpcs: Avoid creating dummy XPCS MDIO device
Date: Tue, 12 Dec 2023 19:06:46 +0000 [thread overview]
Message-ID: <ZXivRofyIpvmfOyR@shell.armlinux.org.uk> (raw)
In-Reply-To: <kagwzutwnbpiyc7mmtq7ka3vhffw4fejuti5vepnla74rocruh@tryn6lxhwbjz>
On Tue, Dec 12, 2023 at 06:26:16PM +0300, Serge Semin wrote:
> I would have used in the first place if it was externally visible, but
> it's defined as static. Do you suggest to make it global or ...
That would be one option - I didn't make it visible when I introduced it
beacuse there were no users for it.
> > At some point, we should implement
> > mdiobus_get_mdiodev() which also deals with the refcount.
>
> ... create mdiobus_get_mdiodev() instead?
>
> * Note in the commit message I mentioned that having a getter would be
> * better than directly touching the mii_bus instance guts.
What I'm thinking is:
/**
* mdiobus_get_mdiodev() - get a mdiodev for the specified bus
* @bus: mii_bus to get mdio device from
* @addr: mdio address of mdio device
*
* Return the struct mdio_device attached to the MII bus @bus at MDIO
* address @addr. On success, the refcount on the device will be
* increased, which must be dropped using mdio_device_put(), and the
* mdio device returned. Otherwise, returns NULL.
*/
struct mdio_device *mdiobus_get_mdiodev(struct mii_bus *bus, int addr)
{
struct mdio_device *mdiodev;
mdiodev = mdiobus_find_device(bus, addr);
if (mdiodev)
get_device(&mdiodev->dev);
return mdiodev;
}
EXPORT_SYMBOL(mdiobus_get_mdiodev);
should do it, and will hold a reference on the mdiodev structure (which
won't be freed) and also on the mii_bus (since this device is a child
of the bus device, the parent can't be released until the child has
been, so struct mii_bus should at least stay around.)
What would help the "the bus driver has been unbound" situation is if
we took the mdio_lock on the bus, and then set the {read,write}{,_c45}
functions to dummy stubs when the bus is being unregistered which then
return e.g. -ENXIO. That will probably make unbinding/unloading all
MDIO bus drivers safe from kernel oops, although phylib will spit out
a non-useful backtrace if it tries an access. I don't think there's
much which can be done about that - I did propose a patch to change
that behaviour but apparently folk like having it!
It isn't perfect - it's racy, but then accessing mdio_map[] is
inherently racy due to no locking with mdiobus_.*register_device().
At least if we have everyone using a proper getter function rather
than directly fiddling with bus->mdio_map[]. We only have one driver
that accesses it directly at the moment (mscc_ptp):
dev = phydev->mdio.bus->mdio_map[vsc8531->ts_base_addr];
phydev = container_of(dev, struct phy_device, mdio);
return phydev->priv;
and that should really be using mdiobus_get_phy().
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
WARNING: multiple messages have this Message-ID (diff)
From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Serge Semin <fancer.lancer@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Jose Abreu <joabreu@synopsys.com>,
Jose Abreu <Jose.Abreu@synopsys.com>,
Maxime Chevallier <maxime.chevallier@bootlin.com>,
Tomer Maimon <tmaimon77@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
openbmc@lists.ozlabs.org, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next 06/16] net: pcs: xpcs: Avoid creating dummy XPCS MDIO device
Date: Tue, 12 Dec 2023 19:06:46 +0000 [thread overview]
Message-ID: <ZXivRofyIpvmfOyR@shell.armlinux.org.uk> (raw)
In-Reply-To: <kagwzutwnbpiyc7mmtq7ka3vhffw4fejuti5vepnla74rocruh@tryn6lxhwbjz>
On Tue, Dec 12, 2023 at 06:26:16PM +0300, Serge Semin wrote:
> I would have used in the first place if it was externally visible, but
> it's defined as static. Do you suggest to make it global or ...
That would be one option - I didn't make it visible when I introduced it
beacuse there were no users for it.
> > At some point, we should implement
> > mdiobus_get_mdiodev() which also deals with the refcount.
>
> ... create mdiobus_get_mdiodev() instead?
>
> * Note in the commit message I mentioned that having a getter would be
> * better than directly touching the mii_bus instance guts.
What I'm thinking is:
/**
* mdiobus_get_mdiodev() - get a mdiodev for the specified bus
* @bus: mii_bus to get mdio device from
* @addr: mdio address of mdio device
*
* Return the struct mdio_device attached to the MII bus @bus at MDIO
* address @addr. On success, the refcount on the device will be
* increased, which must be dropped using mdio_device_put(), and the
* mdio device returned. Otherwise, returns NULL.
*/
struct mdio_device *mdiobus_get_mdiodev(struct mii_bus *bus, int addr)
{
struct mdio_device *mdiodev;
mdiodev = mdiobus_find_device(bus, addr);
if (mdiodev)
get_device(&mdiodev->dev);
return mdiodev;
}
EXPORT_SYMBOL(mdiobus_get_mdiodev);
should do it, and will hold a reference on the mdiodev structure (which
won't be freed) and also on the mii_bus (since this device is a child
of the bus device, the parent can't be released until the child has
been, so struct mii_bus should at least stay around.)
What would help the "the bus driver has been unbound" situation is if
we took the mdio_lock on the bus, and then set the {read,write}{,_c45}
functions to dummy stubs when the bus is being unregistered which then
return e.g. -ENXIO. That will probably make unbinding/unloading all
MDIO bus drivers safe from kernel oops, although phylib will spit out
a non-useful backtrace if it tries an access. I don't think there's
much which can be done about that - I did propose a patch to change
that behaviour but apparently folk like having it!
It isn't perfect - it's racy, but then accessing mdio_map[] is
inherently racy due to no locking with mdiobus_.*register_device().
At least if we have everyone using a proper getter function rather
than directly fiddling with bus->mdio_map[]. We only have one driver
that accesses it directly at the moment (mscc_ptp):
dev = phydev->mdio.bus->mdio_map[vsc8531->ts_base_addr];
phydev = container_of(dev, struct phy_device, mdio);
return phydev->priv;
and that should really be using mdiobus_get_phy().
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
next prev parent reply other threads:[~2023-12-12 19:08 UTC|newest]
Thread overview: 146+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-05 10:35 [PATCH net-next 00/16] net: pcs: xpcs: Add memory-based management iface support Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 01/16] net: pcs: xpcs: Drop sentinel entry from 2500basex ifaces list Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 11:24 ` Vladimir Oltean
2023-12-05 11:24 ` Vladimir Oltean
2023-12-05 11:39 ` Serge Semin
2023-12-05 11:39 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 02/16] net: pcs: xpcs: Drop redundant workqueue.h include directive Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 13:34 ` Andrew Lunn
2023-12-05 13:34 ` Andrew Lunn
2023-12-05 10:35 ` [PATCH net-next 03/16] net: pcs: xpcs: Return EINVAL in the internal methods Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 13:34 ` Andrew Lunn
2023-12-05 13:34 ` Andrew Lunn
2023-12-05 10:35 ` [PATCH net-next 04/16] net: pcs: xpcs: Explicitly return error on caps validation Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 05/16] net: pcs: xpcs: Move native device ID macro to linux/pcs/pcs-xpcs.h Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:45 ` Russell King (Oracle)
2023-12-05 10:45 ` Russell King (Oracle)
2023-12-05 11:14 ` Serge Semin
2023-12-05 11:14 ` Serge Semin
2023-12-05 11:22 ` Russell King (Oracle)
2023-12-05 11:22 ` Russell King (Oracle)
2023-12-05 11:48 ` Serge Semin
2023-12-05 11:48 ` Serge Semin
2023-12-05 11:27 ` Vladimir Oltean
2023-12-05 11:27 ` Vladimir Oltean
2023-12-05 11:49 ` Serge Semin
2023-12-05 11:49 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 06/16] net: pcs: xpcs: Avoid creating dummy XPCS MDIO device Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:49 ` Russell King (Oracle)
2023-12-05 10:49 ` Russell King (Oracle)
2023-12-05 11:31 ` Serge Semin
2023-12-05 11:31 ` Serge Semin
2023-12-05 13:31 ` Russell King (Oracle)
2023-12-05 13:31 ` Russell King (Oracle)
2023-12-05 13:52 ` Andrew Lunn
2023-12-05 13:52 ` Andrew Lunn
2023-12-05 14:50 ` Russell King (Oracle)
2023-12-05 14:50 ` Russell King (Oracle)
2023-12-12 13:52 ` Serge Semin
2023-12-12 13:52 ` Serge Semin
2023-12-05 11:52 ` Vladimir Oltean
2023-12-05 11:52 ` Vladimir Oltean
2023-12-13 15:27 ` Serge Semin
2023-12-13 15:27 ` Serge Semin
2023-12-19 15:48 ` Serge Semin
2023-12-19 15:48 ` Serge Semin
2023-12-19 16:28 ` Vladimir Oltean
2023-12-19 16:28 ` Vladimir Oltean
2023-12-19 21:48 ` Serge Semin
2023-12-19 21:48 ` Serge Semin
2023-12-05 13:46 ` Russell King (Oracle)
2023-12-05 13:46 ` Russell King (Oracle)
2023-12-05 14:54 ` Russell King (Oracle)
2023-12-05 14:54 ` Russell King (Oracle)
2023-12-12 15:26 ` Serge Semin
2023-12-12 15:26 ` Serge Semin
2023-12-12 19:06 ` Russell King (Oracle) [this message]
2023-12-12 19:06 ` Russell King (Oracle)
2023-12-13 15:47 ` Serge Semin
2023-12-13 15:47 ` Serge Semin
2023-12-13 0:01 ` Serge Semin
2023-12-13 0:01 ` Serge Semin
2023-12-13 16:32 ` Russell King (Oracle)
2023-12-13 16:32 ` Russell King (Oracle)
2023-12-14 14:19 ` Serge Semin
2023-12-14 14:19 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 07/16] net: pcs: xpcs: Split up xpcs_create() content to sub-functions Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 08/16] dt-bindings: net: Add Synopsys DW xPCS bindings Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-14 17:40 ` Rob Herring
2023-12-14 17:40 ` Rob Herring
2023-12-14 21:27 ` Serge Semin
2023-12-14 21:27 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 09/16] net: mdio: Add Synopsys DW XPCS management interface support Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 12:32 ` Maxime Chevallier
2023-12-05 12:32 ` Maxime Chevallier
2023-12-06 16:48 ` Serge Semin
2023-12-06 16:48 ` Serge Semin
2023-12-06 17:01 ` Andrew Lunn
2023-12-06 17:01 ` Andrew Lunn
2023-12-07 13:35 ` Serge Semin
2023-12-07 13:35 ` Serge Semin
2023-12-07 14:02 ` Russell King (Oracle)
2023-12-07 14:02 ` Russell King (Oracle)
2023-12-07 14:54 ` Andrew Lunn
2023-12-07 14:54 ` Andrew Lunn
2023-12-08 16:07 ` Serge Semin
2023-12-08 16:07 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 10/16] net: pcs: xpcs: Add generic DW XPCS MDIO-device support Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 11:13 ` Vladimir Oltean
2023-12-05 11:13 ` Vladimir Oltean
2023-12-05 11:35 ` Serge Semin
2023-12-05 11:35 ` Serge Semin
2023-12-05 12:23 ` Vladimir Oltean
2023-12-05 12:23 ` Vladimir Oltean
2023-12-08 14:11 ` Serge Semin
2023-12-08 14:11 ` Serge Semin
2023-12-08 16:33 ` Vladimir Oltean
2023-12-08 16:33 ` Vladimir Oltean
2023-12-14 11:54 ` Serge Semin
2023-12-14 11:54 ` Serge Semin
2023-12-14 12:00 ` Vladimir Oltean
2023-12-14 12:00 ` Vladimir Oltean
2023-12-14 12:28 ` Serge Semin
2023-12-14 12:28 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 11/16] net: pcs: xpcs: Change xpcs_create_mdiodev() suffix to "byaddr" Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 23:03 ` kernel test robot
2023-12-05 23:03 ` kernel test robot
2023-12-05 23:03 ` kernel test robot
2023-12-07 14:37 ` Serge Semin
2023-12-07 14:37 ` Serge Semin
2023-12-07 14:37 ` Serge Semin
2023-12-06 0:29 ` kernel test robot
2023-12-06 0:29 ` kernel test robot
2023-12-06 0:29 ` kernel test robot
2023-12-05 10:35 ` [PATCH net-next 12/16] net: pcs: xpcs: Add xpcs_create_bynode() method Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 13/16] net: stmmac: intel: Register generic MDIO device Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-06 0:19 ` kernel test robot
2023-12-06 0:19 ` kernel test robot
2023-12-06 0:19 ` kernel test robot
2023-12-07 14:47 ` Serge Semin
2023-12-07 14:47 ` Serge Semin
2023-12-07 14:47 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 14/16] net: stmmac: Pass netdev to XPCS setup function Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 15/16] net: stmmac: Add dedicated XPCS cleanup method Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` [PATCH net-next 16/16] net: stmmac: Add externally detected DW XPCS support Serge Semin
2023-12-05 10:35 ` Serge Semin
2023-12-05 10:35 ` Serge Semin
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=ZXivRofyIpvmfOyR@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=Jose.Abreu@synopsys.com \
--cc=alexandre.torgue@foss.st.com \
--cc=andrew@lunn.ch \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=fancer.lancer@gmail.com \
--cc=hkallweit1@gmail.com \
--cc=joabreu@synopsys.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maxime.chevallier@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=openbmc@lists.ozlabs.org \
--cc=pabeni@redhat.com \
--cc=robh+dt@kernel.org \
--cc=tmaimon77@gmail.com \
/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.