On Tue, 15 Jul 2025 07:15:51 +0000 John Ernberg wrote:
I'm worried that this is still racy. Since usbnet_bh checks if carrier is ok and __handle_link_change() checks the opposite something must be out of sync if both run. Most likely something restored the carrier while we're still handling the previous carrier loss.
There could definitely be other factors, I'll try to dig some in cdc_ether and see if something there could be causing problems for the usbnet core. I honestly kinda stopped digging when I found unlink_urbs() being wrapped with a pause/unpause at another place tied to a commit seeing a similar issue.
Looking at cdc_ether:
static void usbnet_cdc_zte_status(struct usbnet *dev, struct urb *urb) [...] if (event->wValue && netif_carrier_ok(dev->net)) netif_carrier_off(dev->net);
This looks sus. Is the Gemalto Cinterion PLS83-W ZTE based?