From: Oleksij Rempel <o.rempel@pengutronix.de>
To: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
Cc: Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Florian Fainelli <florian.fainelli@broadcom.com>,
netdev@vger.kernel.org
Subject: Re: [PATCH net] net: phylink: ensure PHY momentary link-fails are handled
Date: Wed, 13 Nov 2024 07:11:25 +0100 [thread overview]
Message-ID: <ZzRDDbecGLMiRP0m@pengutronix.de> (raw)
In-Reply-To: <E1tAtcW-002RBS-LB@rmk-PC.armlinux.org.uk>
On Tue, Nov 12, 2024 at 04:20:00PM +0000, Russell King (Oracle) wrote:
> Normally, phylib won't notify changes in quick succession. However, as
> a result of commit 3e43b903da04 ("net: phy: Immediately call
> adjust_link if only tx_lpi_enabled changes") this is no longer true -
> it is now possible that phy_link_down() and phy_link_up() will both
> complete before phylink's resolver has run, which means it'll miss that
> pl->phy_state.link momentarily became false.
>
> Rename "mac_link_dropped" to be more generic "link_failed" since it will
> cover more than the MAC/PCS end of the link failing, and arrange to set
> this in phylink_phy_change() if we notice that the PHY reports that the
> link is down.
>
> This will ensure that we capture an EEE reconfiguration event.
>
> Fixes: 3e43b903da04 ("net: phy: Immediately call adjust_link if only tx_lpi_enabled changes")
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Thank you!
> ---
> drivers/net/phy/phylink.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
> index 4309317de3d1..3e9957b6aa14 100644
> --- a/drivers/net/phy/phylink.c
> +++ b/drivers/net/phy/phylink.c
> @@ -78,7 +78,7 @@ struct phylink {
> unsigned int pcs_neg_mode;
> unsigned int pcs_state;
>
> - bool mac_link_dropped;
> + bool link_failed;
> bool using_mac_select_pcs;
>
> struct sfp_bus *sfp_bus;
> @@ -1475,9 +1475,9 @@ static void phylink_resolve(struct work_struct *w)
> cur_link_state = pl->old_link_state;
>
> if (pl->phylink_disable_state) {
> - pl->mac_link_dropped = false;
> + pl->link_failed = false;
> link_state.link = false;
> - } else if (pl->mac_link_dropped) {
> + } else if (pl->link_failed) {
> link_state.link = false;
> retrigger = true;
> } else {
> @@ -1572,7 +1572,7 @@ static void phylink_resolve(struct work_struct *w)
> phylink_link_up(pl, link_state);
> }
> if (!link_state.link && retrigger) {
> - pl->mac_link_dropped = false;
> + pl->link_failed = false;
> queue_work(system_power_efficient_wq, &pl->resolve);
> }
> mutex_unlock(&pl->state_mutex);
> @@ -1835,6 +1835,8 @@ static void phylink_phy_change(struct phy_device *phydev, bool up)
> pl->phy_state.pause |= MLO_PAUSE_RX;
> pl->phy_state.interface = phydev->interface;
> pl->phy_state.link = up;
> + if (!up)
> + pl->link_failed = true;
> mutex_unlock(&pl->state_mutex);
>
> phylink_run_resolve(pl);
> @@ -2158,7 +2160,7 @@ EXPORT_SYMBOL_GPL(phylink_disconnect_phy);
> static void phylink_link_changed(struct phylink *pl, bool up, const char *what)
> {
> if (!up)
> - pl->mac_link_dropped = true;
> + pl->link_failed = true;
> phylink_run_resolve(pl);
> phylink_dbg(pl, "%s link %s\n", what, up ? "up" : "down");
> }
> @@ -2792,7 +2794,7 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl,
> * link will cycle.
> */
> if (manual_changed) {
> - pl->mac_link_dropped = true;
> + pl->link_failed = true;
> phylink_run_resolve(pl);
> }
>
> --
> 2.30.2
>
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
next prev parent reply other threads:[~2024-11-13 6:11 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-12 16:20 [PATCH net] net: phylink: ensure PHY momentary link-fails are handled Russell King (Oracle)
2024-11-13 6:11 ` Oleksij Rempel [this message]
2024-11-14 3:10 ` patchwork-bot+netdevbpf
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=ZzRDDbecGLMiRP0m@pengutronix.de \
--to=o.rempel@pengutronix.de \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=florian.fainelli@broadcom.com \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rmk+kernel@armlinux.org.uk \
/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.