diff options
author | Johan Hovold <jhovold@gmail.com> | 2014-05-26 13:23:47 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-05-27 18:04:09 -0400 |
commit | 89e54e4468338df5a4ab7627c5b8b10786ee43e8 (patch) | |
tree | 70db106047c274db709be3c8784c4e1cc13232e1 /drivers/usb/class | |
parent | bbf0cb3e93a1b6ef8bf22a67f35d7c98ef378f2b (diff) |
USB: cdc-acm: remove redundant disconnected test from shutdown
Remove redundant disconnect test from shutdown(), which is never called
post disconnect() where we do synchronous hangup.
Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/class')
-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) | |||
594 | 594 | ||
595 | dev_dbg(&acm->control->dev, "%s\n", __func__); | 595 | dev_dbg(&acm->control->dev, "%s\n", __func__); |
596 | 596 | ||
597 | mutex_lock(&acm->mutex); | 597 | pm_err = usb_autopm_get_interface(acm->control); |
598 | if (!acm->disconnected) { | 598 | acm_set_control(acm, acm->ctrlout = 0); |
599 | pm_err = usb_autopm_get_interface(acm->control); | ||
600 | acm_set_control(acm, acm->ctrlout = 0); | ||
601 | |||
602 | for (;;) { | ||
603 | urb = usb_get_from_anchor(&acm->delayed); | ||
604 | if (!urb) | ||
605 | break; | ||
606 | wb = urb->context; | ||
607 | wb->use = 0; | ||
608 | usb_autopm_put_interface_async(acm->control); | ||
609 | } | ||
610 | 599 | ||
611 | usb_kill_urb(acm->ctrlurb); | 600 | for (;;) { |
612 | for (i = 0; i < ACM_NW; i++) | 601 | urb = usb_get_from_anchor(&acm->delayed); |
613 | usb_kill_urb(acm->wb[i].urb); | 602 | if (!urb) |
614 | for (i = 0; i < acm->rx_buflimit; i++) | 603 | break; |
615 | usb_kill_urb(acm->read_urbs[i]); | 604 | wb = urb->context; |
616 | acm->control->needs_remote_wakeup = 0; | 605 | wb->use = 0; |
617 | if (!pm_err) | 606 | usb_autopm_put_interface_async(acm->control); |
618 | usb_autopm_put_interface(acm->control); | ||
619 | } | 607 | } |
620 | mutex_unlock(&acm->mutex); | 608 | |
609 | usb_kill_urb(acm->ctrlurb); | ||
610 | for (i = 0; i < ACM_NW; i++) | ||
611 | usb_kill_urb(acm->wb[i].urb); | ||
612 | for (i = 0; i < acm->rx_buflimit; i++) | ||
613 | usb_kill_urb(acm->read_urbs[i]); | ||
614 | |||
615 | acm->control->needs_remote_wakeup = 0; | ||
616 | if (!pm_err) | ||
617 | usb_autopm_put_interface(acm->control); | ||
621 | } | 618 | } |
622 | 619 | ||
623 | static void acm_tty_cleanup(struct tty_struct *tty) | 620 | static void acm_tty_cleanup(struct tty_struct *tty) |