On Thu, Sep 04, 2025 at 09:52:03AM +0200, Oliver Neukum wrote: > > > On 9/4/25 09:26, Xu Yang wrote: > > > > /* 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 false > > The 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 > >