Re: [PATCH] net: usbnet: skip info->stop() callback if suspend_count is not 0
From: Xu Yang <xu.yang_2@nxp.com>
Date: 2025-09-05 10:24:30
Also in:
linux-usb
On Thu, Sep 04, 2025 at 09:52:03AM +0200, Oliver Neukum wrote:
On 9/4/25 09:26, Xu Yang wrote:quoted
quoted
quoted
/* allow minidriver to stop correctly (wireless devices to turn off * radio etc) */ - if (info->stop) { + if (info->stop && !dev->suspend_count) {... for !dev->suspend_count to be falseThe suspend_count won't go to 0 because there is no chance to call usbnet_resume() if the USB device is physically disconnected from the USB port during system suspend.Sorry for the delay. While you are correct that a physical disconnect will make the PM call fail, you cannot assume that a physical disconnect is the only reason disconnect() would be called. It would also be called if - the module is unloaded - usbfs is used to disconnect the driver from the device
I understand your concern, however, it seems that only disconnect during the PM operations then the suspend_count will be non-zero.
Hence it seems to me that using suspend_count is false. You need to use the return of the PM operation.
And a non-zero suspend_count itself is also a PM operation result, isn't it? Besides, the another way we can determine whether the device has been unattached, like following:
@@ -839,7 +839,7 @@ int usbnet_stop (struct net_device *net) pm = usb_autopm_get_interface(dev->intf); /* allow minidriver to stop correctly (wireless devices to turn off * radio etc) */ - if (info->stop) { + if (info->stop && dev->udev->state != USB_STATE_NOTATTACHED) { retval = info->stop(dev); if (retval < 0) netif_info(dev, ifdown, dev->net,
So if it's already in NOTATTACHED state, no needs to stop the device too. Do you prefer this way? Thanks, Xu Yang
Regards Oliver