Re: [PATCH net v1 1/1] net: usb: asix: ax88772: drop phylink use in PM to avoid MDIO runtime PM wakeups

From: Xu Yang

Date: Mon Sep 08 2025 - 22:11:28 EST


On Mon, Sep 08, 2025 at 01:26:19PM +0200, 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.

I just meet the same issue. It fix the issue for me!

Tested-by: Xu Yang <xu.yang_2@xxxxxxx>

Thanks,
Xu Yang

>
> Fixes: e0bffe3e6894 ("net: asix: ax88772: migrate to phylink")
> Reported-by: Hubert Wiśniewski <hubert.wisniewski.25632@xxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>
> ---
> 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
>