On Mon, Aug 18, 2025 at 11:04:55AM +0200, Oliver Neukum wrote:
On 8/18/25 09:57, Xu Yang wrote:
quoted
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -839,7 +839,7 @@ int usbnet_stop (struct net_device *net)
pm = usb_autopm_get_interface(dev->intf);
This needs to fail ...
It returns 0, so "pm = 0" here which means it succeed.
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 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.
quoted
retval = info->stop(dev);
if (retval < 0)
netif_info(dev, ifdown, dev->net,
In other words, this means that the driver has insufficient
error handling in this method. This needs to be fixed and it
needs to be fixed explicitly. We do not hide error handling.
Do you mean info->stop() should be called and return error code if something
is wrong?
Please use a literal "if (pm < 0)" to skip the parts we need to skip
if the resumption fails.
pm = 0 here.
Thanks,
Xu Yang
Regards
Oliver
NACKED-BY: Oliver Neukum [off-list ref]