public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH net] net: usb: asix: ax88772: replace usbnet_link_change() with queue_work() and usbnet_unlink_rx_urbs()
@ 2026-05-06  1:03 Markus Baier
  2026-05-06 12:58 ` Oleksij Rempel
  0 siblings, 1 reply; 2+ messages in thread
From: Markus Baier @ 2026-05-06  1:03 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Andrew Lunn, David S . Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, Ethan Nelson-Moore, Miaoqian Lin,
	linux-usb, linux-kernel, netdev, Markus Baier

Commit 36bdc0e815b4 ("net: usb: asix: ax88772: re-add usbnet_link_change()
in phylink callbacks") restored the link-change notification that was
lost during the phylink migration, by calling usbnet_link_change() from
the phylink mac_link_up() / mac_link_down() callbacks.

While this fixed the original symptom (RX URB submission not being
initiated after link up), usbnet_link_change() also calls
netif_carrier_off() on link-down, which is redundant in a phylink-based
driver because phylink manages the carrier state itself.

Replace the usbnet_link_change() calls with the minimal operations:

  - In ax88772_mac_link_up(), schedule dev->bh_work directly via
    queue_work(system_bh_wq, &dev->bh_work). This is the same
    mechanism usbnet_open() uses to schedule the bottom-half
    that submits RX URBs.

  - In ax88772_mac_link_down(), call usbnet_unlink_rx_urbs() to
    return any in-flight RX URBs to the host controller.
    This releases USB bandwidth and avoids keeping unused buffers
    queued while the link is down. This is the symmetric
    counterpart to scheduling new RX URBs on link up.

Tested with the Apple A1277 USB Ethernet Adapter (05ac:1402,
AX88772A based) on a Banana Pro (Allwinner A20).

Fixes: 36bdc0e815b4 ("net: usb: asix: ax88772: re-add usbnet_link_change() in phylink callbacks")
Assisted-by: Claude:claude-opus-4-7
Signed-off-by: Markus Baier <Markus.Baier@soslab.tu-darmstadt.de>
---

Transparency notice: The English formulation of this commit message
was prepared with AI assistance. The actual system testing and
verification of the issue were performed manually without AI
involvement.

This is a follow-up to commit 36bdc0e815b4 (just applied to net.git).
While that patch correctly restored the missing RX URB submission,
I realized during further analysis that usbnet_link_change() carries
side effects (notably calling netif_carrier_off() on link-down) that
are redundant in a phylink-based driver. After studying how
usbnet_open() handles the same task (direct queue_work() call), this
minimal approach better matches the existing usbnet patterns.

I am sending this now rather than waiting, because the previous patch
just landed and I would like the cleanup to be considered before it
propagates further into stable kernels via the Fixes: tag.

 drivers/net/usb/asix_devices.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
index 293ef80c4e30..4230ff611c4b 100644
--- a/drivers/net/usb/asix_devices.c
+++ b/drivers/net/usb/asix_devices.c
@@ -756,7 +756,11 @@ static void ax88772_mac_link_down(struct phylink_config *config,
 	struct usbnet *dev = netdev_priv(to_net_dev(config->dev));
 
 	asix_write_medium_mode(dev, 0, 0);
-	usbnet_link_change(dev, false, false);
+
+	/* Phylink will call netif_carrier_off(), but we should explicitly
+	 * stop RX URBs to save USB bandwidth.
+	 */
+	usbnet_unlink_rx_urbs(dev);
 }
 
 static void ax88772_mac_link_up(struct phylink_config *config,
@@ -787,7 +791,11 @@ static void ax88772_mac_link_up(struct phylink_config *config,
 		m |= AX_MEDIUM_RFC;
 
 	asix_write_medium_mode(dev, m, 0);
-	usbnet_link_change(dev, true, false);
+
+	/* Phylink will call netif_carrier_on(), but we need to explicitly
+	 * kick off RX URB submission in usbnet.
+	 */
+	queue_work(system_bh_wq, &dev->bh_work);
 }
 
 static const struct phylink_mac_ops ax88772_phylink_mac_ops = {
-- 
2.52.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH net] net: usb: asix: ax88772: replace usbnet_link_change() with queue_work() and usbnet_unlink_rx_urbs()
  2026-05-06  1:03 [PATCH net] net: usb: asix: ax88772: replace usbnet_link_change() with queue_work() and usbnet_unlink_rx_urbs() Markus Baier
@ 2026-05-06 12:58 ` Oleksij Rempel
  0 siblings, 0 replies; 2+ messages in thread
From: Oleksij Rempel @ 2026-05-06 12:58 UTC (permalink / raw)
  To: Markus Baier
  Cc: Andrew Lunn, David S . Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, Ethan Nelson-Moore, Miaoqian Lin,
	linux-usb, linux-kernel, netdev

On Wed, May 06, 2026 at 03:03:44AM +0200, Markus Baier wrote:
> Commit 36bdc0e815b4 ("net: usb: asix: ax88772: re-add usbnet_link_change()
> in phylink callbacks") restored the link-change notification that was
> lost during the phylink migration, by calling usbnet_link_change() from
> the phylink mac_link_up() / mac_link_down() callbacks.
> 
> While this fixed the original symptom (RX URB submission not being
> initiated after link up), usbnet_link_change() also calls
> netif_carrier_off() on link-down, which is redundant in a phylink-based
> driver because phylink manages the carrier state itself.
> 
> Replace the usbnet_link_change() calls with the minimal operations:
> 
>   - In ax88772_mac_link_up(), schedule dev->bh_work directly via
>     queue_work(system_bh_wq, &dev->bh_work). This is the same
>     mechanism usbnet_open() uses to schedule the bottom-half
>     that submits RX URBs.
> 
>   - In ax88772_mac_link_down(), call usbnet_unlink_rx_urbs() to
>     return any in-flight RX URBs to the host controller.
>     This releases USB bandwidth and avoids keeping unused buffers
>     queued while the link is down. This is the symmetric
>     counterpart to scheduling new RX URBs on link up.
> 
> Tested with the Apple A1277 USB Ethernet Adapter (05ac:1402,
> AX88772A based) on a Banana Pro (Allwinner A20).
> 
> Fixes: 36bdc0e815b4 ("net: usb: asix: ax88772: re-add usbnet_link_change() in phylink callbacks")
> Assisted-by: Claude:claude-opus-4-7
> Signed-off-by: Markus Baier <Markus.Baier@soslab.tu-darmstadt.de>

Tested on AX88772C. Thx!

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> 

-- 
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 |

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-05-06 12:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-06  1:03 [PATCH net] net: usb: asix: ax88772: replace usbnet_link_change() with queue_work() and usbnet_unlink_rx_urbs() Markus Baier
2026-05-06 12:58 ` Oleksij Rempel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox