diff options
Diffstat (limited to 'drivers/net/usb/usbnet.c')
| -rw-r--r-- | drivers/net/usb/usbnet.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index c04110ba677..50ed7ab09c9 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -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:  |