diff options
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 41 | 
1 files changed, 19 insertions, 22 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index bc7a2a6fc4ac..91fdc293196f 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -594,30 +594,27 @@ static void acm_port_shutdown(struct tty_port *port)  	dev_dbg(&acm->control->dev, "%s\n", __func__); -	mutex_lock(&acm->mutex); -	if (!acm->disconnected) { -		pm_err = usb_autopm_get_interface(acm->control); -		acm_set_control(acm, acm->ctrlout = 0); - -		for (;;) { -			urb = usb_get_from_anchor(&acm->delayed); -			if (!urb) -				break; -			wb = urb->context; -			wb->use = 0; -			usb_autopm_put_interface_async(acm->control); -		} +	pm_err = usb_autopm_get_interface(acm->control); +	acm_set_control(acm, acm->ctrlout = 0); -		usb_kill_urb(acm->ctrlurb); -		for (i = 0; i < ACM_NW; i++) -			usb_kill_urb(acm->wb[i].urb); -		for (i = 0; i < acm->rx_buflimit; i++) -			usb_kill_urb(acm->read_urbs[i]); -		acm->control->needs_remote_wakeup = 0; -		if (!pm_err) -			usb_autopm_put_interface(acm->control); +	for (;;) { +		urb = usb_get_from_anchor(&acm->delayed); +		if (!urb) +			break; +		wb = urb->context; +		wb->use = 0; +		usb_autopm_put_interface_async(acm->control);  	} -	mutex_unlock(&acm->mutex); + +	usb_kill_urb(acm->ctrlurb); +	for (i = 0; i < ACM_NW; i++) +		usb_kill_urb(acm->wb[i].urb); +	for (i = 0; i < acm->rx_buflimit; i++) +		usb_kill_urb(acm->read_urbs[i]); + +	acm->control->needs_remote_wakeup = 0; +	if (!pm_err) +		usb_autopm_put_interface(acm->control);  }  static void acm_tty_cleanup(struct tty_struct *tty)  | 
