diff options
Diffstat (limited to 'drivers/usb/gadget/u_ether.c')
| -rw-r--r-- | drivers/usb/gadget/u_ether.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c index 90e82e288eb..6458764994e 100644 --- a/drivers/usb/gadget/u_ether.c +++ b/drivers/usb/gadget/u_ether.c @@ -14,6 +14,7 @@  /* #define VERBOSE_DEBUG */  #include <linux/kernel.h> +#include <linux/module.h>  #include <linux/gfp.h>  #include <linux/device.h>  #include <linux/ctype.h> @@ -83,17 +84,10 @@ struct eth_dev {  #define DEFAULT_QLEN	2	/* double buffering by default */ - -#ifdef CONFIG_USB_GADGET_DUALSPEED -  static unsigned qmult = 5;  module_param(qmult, uint, S_IRUGO|S_IWUSR);  MODULE_PARM_DESC(qmult, "queue length multiplier at high/super speed"); -#else	/* full speed (low speed doesn't do bulk) */ -#define qmult		1 -#endif -  /* for dual-speed hardware, use deeper queues at high/super speed */  static inline int qlen(struct usb_gadget *gadget)  { @@ -669,6 +663,8 @@ static int eth_stop(struct net_device *net)  	spin_lock_irqsave(&dev->lock, flags);  	if (dev->port_usb) {  		struct gether	*link = dev->port_usb; +		const struct usb_endpoint_descriptor *in; +		const struct usb_endpoint_descriptor *out;  		if (link->close)  			link->close(link); @@ -682,10 +678,14 @@ static int eth_stop(struct net_device *net)  		 * their own pace; the network stack can handle old packets.  		 * For the moment we leave this here, since it works.  		 */ +		in = link->in_ep->desc; +		out = link->out_ep->desc;  		usb_ep_disable(link->in_ep);  		usb_ep_disable(link->out_ep);  		if (netif_carrier_ok(net)) {  			DBG(dev, "host still using in/out endpoints\n"); +			link->in_ep->desc = in; +			link->out_ep->desc = out;  			usb_ep_enable(link->in_ep);  			usb_ep_enable(link->out_ep);  		} @@ -834,7 +834,7 @@ void gether_cleanup(void)  		return;  	unregister_netdev(the_dev->net); -	flush_work_sync(&the_dev->work); +	flush_work(&the_dev->work);  	free_netdev(the_dev->net);  	the_dev = NULL;  |