|
@@ -719,7 +719,8 @@ int usbnet_stop (struct net_device *net)
|
|
|
dev->flags = 0;
|
|
|
del_timer_sync (&dev->delay);
|
|
|
tasklet_kill (&dev->bh);
|
|
|
- if (info->manage_power)
|
|
|
+ if (info->manage_power &&
|
|
|
+ !test_and_clear_bit(EVENT_NO_RUNTIME_PM, &dev->flags))
|
|
|
info->manage_power(dev, 0);
|
|
|
else
|
|
|
usb_autopm_put_interface(dev->intf);
|
|
@@ -794,14 +795,14 @@ int usbnet_open (struct net_device *net)
|
|
|
tasklet_schedule (&dev->bh);
|
|
|
if (info->manage_power) {
|
|
|
retval = info->manage_power(dev, 1);
|
|
|
- if (retval < 0)
|
|
|
- goto done_manage_power_error;
|
|
|
- usb_autopm_put_interface(dev->intf);
|
|
|
+ if (retval < 0) {
|
|
|
+ retval = 0;
|
|
|
+ set_bit(EVENT_NO_RUNTIME_PM, &dev->flags);
|
|
|
+ } else {
|
|
|
+ usb_autopm_put_interface(dev->intf);
|
|
|
+ }
|
|
|
}
|
|
|
return retval;
|
|
|
-
|
|
|
-done_manage_power_error:
|
|
|
- clear_bit(EVENT_DEV_OPEN, &dev->flags);
|
|
|
done:
|
|
|
usb_autopm_put_interface(dev->intf);
|
|
|
done_nopm:
|