[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <DCNKVCWI6VEQ.30M6YA786ZIX2@gmail.com>
Date: Mon, 08 Sep 2025 19:00:09 +0200
From: Hubert Wiśniewski <hubert.wisniewski.25632@...il.com>
To: "Oleksij Rempel" <o.rempel@...gutronix.de>, "Andrew Lunn"
<andrew+netdev@...n.ch>, "David S. Miller" <davem@...emloft.net>, "Eric
Dumazet" <edumazet@...gle.com>, "Jakub Kicinski" <kuba@...nel.org>, "Paolo
Abeni" <pabeni@...hat.com>
Cc: <stable@...r.kernel.org>, <kernel@...gutronix.de>,
<linux-kernel@...r.kernel.org>, <netdev@...r.kernel.org>, "Lukas Wunner"
<lukas@...ner.de>, "Russell King" <linux@...linux.org.uk>, "Xu Yang"
<xu.yang_2@....com>, <linux-usb@...r.kernel.org>
Subject: Re: [PATCH net v1 1/1] net: usb: asix: ax88772: drop phylink use in
PM to avoid MDIO runtime PM wakeups
On Mon Sep 8, 2025 at 1:26 PM CEST, Oleksij Rempel wrote:
> Drop phylink_{suspend,resume}() from ax88772 PM callbacks.
>
> MDIO bus accesses have their own runtime-PM handling and will try to
> wake the device if it is suspended. Such wake attempts must not happen
> from PM callbacks while the device PM lock is held. Since phylink
> {sus|re}sume may trigger MDIO, it must not be called in PM context.
>
> No extra phylink PM handling is required for this driver:
> - .ndo_open/.ndo_stop control the phylink start/stop lifecycle.
> - ethtool/phylib entry points run in process context, not PM.
> - phylink MAC ops program the MAC on link changes after resume.
Thanks for the patch! Applied to v6.17-rc5, it fixes the problem for me.
Tested-by: Hubert Wiśniewski <hubert.wisniewski.25632@...il.com>
> Fixes: e0bffe3e6894 ("net: asix: ax88772: migrate to phylink")
It does, but v5.15 (including v5.15.191 LTS) is affected as well, from
4a2c7217cd5a ("net: usb: asix: ax88772: manage PHY PM from MAC"). I think
it could also use a patch, but I won't insist.
> Reported-by: Hubert Wiśniewski <hubert.wisniewski.25632@...il.com>
> Cc: stable@...r.kernel.org
> Signed-off-by: Oleksij Rempel <o.rempel@...gutronix.de>
> ---
> drivers/net/usb/asix_devices.c | 13 -------------
> 1 file changed, 13 deletions(-)
>
> diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
> index 792ddda1ad49..1e8f7089f5e8 100644
> --- a/drivers/net/usb/asix_devices.c
> +++ b/drivers/net/usb/asix_devices.c
> @@ -607,15 +607,8 @@ static const struct net_device_ops ax88772_netdev_ops = {
>
> static void ax88772_suspend(struct usbnet *dev)
> {
> - struct asix_common_private *priv = dev->driver_priv;
> u16 medium;
>
> - if (netif_running(dev->net)) {
> - rtnl_lock();
> - phylink_suspend(priv->phylink, false);
> - rtnl_unlock();
> - }
> -
> /* Stop MAC operation */
> medium = asix_read_medium_status(dev, 1);
> medium &= ~AX_MEDIUM_RE;
> @@ -644,12 +637,6 @@ static void ax88772_resume(struct usbnet *dev)
> for (i = 0; i < 3; i++)
> if (!priv->reset(dev, 1))
> break;
> -
> - if (netif_running(dev->net)) {
> - rtnl_lock();
> - phylink_resume(priv->phylink);
> - rtnl_unlock();
> - }
> }
>
> static int asix_resume(struct usb_interface *intf)
> --
> 2.47.3
Powered by blists - more mailing lists