diff options
Diffstat (limited to 'drivers/usb/gadget/legacy/inode.c')
| -rw-r--r-- | drivers/usb/gadget/legacy/inode.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c index b9ca0a26cbd9..684900fcfe24 100644 --- a/drivers/usb/gadget/legacy/inode.c +++ b/drivers/usb/gadget/legacy/inode.c @@ -1183,8 +1183,10 @@ dev_release (struct inode *inode, struct file *fd)  	/* closing ep0 === shutdown all */ -	if (dev->gadget_registered) +	if (dev->gadget_registered) {  		usb_gadget_unregister_driver (&gadgetfs_driver); +		dev->gadget_registered = false; +	}  	/* at this point "good" hardware has disconnected the  	 * device from USB; the host won't see it any more. @@ -1677,9 +1679,10 @@ static void  gadgetfs_suspend (struct usb_gadget *gadget)  {  	struct dev_data		*dev = get_gadget_data (gadget); +	unsigned long		flags;  	INFO (dev, "suspended from state %d\n", dev->state); -	spin_lock (&dev->lock); +	spin_lock_irqsave(&dev->lock, flags);  	switch (dev->state) {  	case STATE_DEV_SETUP:		// VERY odd... host died??  	case STATE_DEV_CONNECTED: @@ -1690,7 +1693,7 @@ gadgetfs_suspend (struct usb_gadget *gadget)  	default:  		break;  	} -	spin_unlock (&dev->lock); +	spin_unlock_irqrestore(&dev->lock, flags);  }  static struct usb_gadget_driver gadgetfs_driver = {  | 
