Netdev Archive on lore.kernel.org help / color / mirror / Atom feed
From: "Russell King (Oracle)" <linux@armlinux.org.uk> To: "Ivan T. Ivanov" <iivanov@suse.de> Cc: Andrew Lunn <andrew@lunn.ch>, Heiner Kallweit <hkallweit1@gmail.com>, "David S . Miller" <davem@davemloft.net>, Jakub Kicinski <kuba@kernel.org>, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] net: phy: leds: Trigger leds only if PHY speed is known Date: Wed, 11 Aug 2021 16:10:45 +0100 [thread overview] Message-ID: <20210811151044.GW22278@shell.armlinux.org.uk> (raw) In-Reply-To: <162867546407.30043.9226294532918992883@localhost> On Wed, Aug 11, 2021 at 12:51:04PM +0300, Ivan T. Ivanov wrote: > There are a few callers of this, but then we have a few callers of > genphy_read_status() too, which are outside just implementing > phy_driver->read_status() and don't use locking. I think we need to strongly discourage people using the genphy* functions directly from anything except phylib driver code. Any such use is a layering violation. I think it does make sense to have a set of lower-level API functions that do the locking necessary, rather than having the phylib locking spread out across multiple network drivers. It's better to have it in one place. > Then there a few users of phy_init_eee() which uses phy_read_status(), > again without locking. That is kind-of a special case - phy_init_eee() can be called by network drivers from within the phylib adjust_link() callback, and this callback is made while holding the phydev's lock. So those cases are safe. If phy_init_eee() is called outside of that, and the lock isn't taken, then yes, it's buggy. This all said, I can't say that I have particularly liked the phy_init_eee() API. It seems to mix interface-up like configuration (do we wish clocks to stop in EEE) with working out whether EEE should be enabled for the speed/duplex that we've just read from the PHY. However, most users of this function are being called as a result of a link-up event when we already know the link parameters, so we shouldn't be re-interrogating the PHY at this point. It seems to me to be entirely unnecessary. > I think will be easier if we protect public phylib API internally with > lock, otherwise it is easy to make mistakes, obviously. But still this > will not protect users which directly dereference phy_device members. As Andrew says... but there are some members that network drivers have to access due to the design of phylib, such as speed, duplex, *pause, link, etc. Indeed these can change at any time when phydev->lock is not held due to the action of phylib polling or link interrupts from the PHY. So, accessing them outside of the adjust_link() callback without holding the lock is racy. Note that phylink's usage is similarly safe to the adjust_link() callback; its access to these members is similarly protected by phydev->lock taken in the phylib state machine - we use the slightly lower-level phy_link_change() hook which avoids some of the help that phylib provides to network drivers (which phylink really doesn't want phylib managing.) -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
next prev parent reply other threads:[~2021-08-11 15:10 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-16 14:11 [PATCH] net: phy: leds: Trigger leds only if PHY speed is known Ivan T. Ivanov 2021-07-16 15:19 ` Andrew Lunn [not found] ` <162646032060.16633.4902744414139431224@localhost> 2021-07-19 15:29 ` Russell King (Oracle) [not found] ` <162737250593.8289.392757192031571742@localhost> [not found] ` <162806599009.5748.14837844278631256325@localhost> 2021-08-09 14:16 ` Russell King (Oracle) [not found] ` <162867546407.30043.9226294532918992883@localhost> 2021-08-11 14:39 ` Andrew Lunn 2021-08-11 15:10 ` Russell King (Oracle) [this message] 2021-08-11 22:23 ` Andrew Lunn
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=20210811151044.GW22278@shell.armlinux.org.uk \ --to=linux@armlinux.org.uk \ --cc=andrew@lunn.ch \ --cc=davem@davemloft.net \ --cc=hkallweit1@gmail.com \ --cc=iivanov@suse.de \ --cc=kuba@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=netdev@vger.kernel.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).