diff options
-rw-r--r-- | drivers/usb/serial/aircable.c | 34 | ||||
-rw-r--r-- | drivers/usb/serial/cypress_m8.c | 6 | ||||
-rw-r--r-- | drivers/usb/serial/digi_acceleport.c | 19 | ||||
-rw-r--r-- | drivers/usb/serial/generic.c | 3 | ||||
-rw-r--r-- | drivers/usb/serial/ir-usb.c | 5 | ||||
-rw-r--r-- | drivers/usb/serial/keyspan.c | 57 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 4 | ||||
-rw-r--r-- | drivers/usb/serial/oti6858.c | 21 | ||||
-rw-r--r-- | drivers/usb/serial/pl2303.c | 18 | ||||
-rw-r--r-- | drivers/usb/serial/sierra.c | 8 | ||||
-rw-r--r-- | drivers/usb/serial/spcp8x5.c | 17 |
11 files changed, 66 insertions, 126 deletions
diff --git a/drivers/usb/serial/aircable.c b/drivers/usb/serial/aircable.c index 2cbdc8f230b8..365db1097bfd 100644 --- a/drivers/usb/serial/aircable.c +++ b/drivers/usb/serial/aircable.c | |||
@@ -468,10 +468,6 @@ static void aircable_read_bulk_callback(struct urb *urb) | |||
468 | 468 | ||
469 | if (status) { | 469 | if (status) { |
470 | dbg("%s - urb status = %d", __func__, status); | 470 | dbg("%s - urb status = %d", __func__, status); |
471 | if (!port->port.count) { | ||
472 | dbg("%s - port is closed, exiting.", __func__); | ||
473 | return; | ||
474 | } | ||
475 | if (status == -EPROTO) { | 471 | if (status == -EPROTO) { |
476 | dbg("%s - caught -EPROTO, resubmitting the urb", | 472 | dbg("%s - caught -EPROTO, resubmitting the urb", |
477 | __func__); | 473 | __func__); |
@@ -530,23 +526,19 @@ static void aircable_read_bulk_callback(struct urb *urb) | |||
530 | } | 526 | } |
531 | tty_kref_put(tty); | 527 | tty_kref_put(tty); |
532 | 528 | ||
533 | /* Schedule the next read _if_ we are still open */ | 529 | /* Schedule the next read */ |
534 | if (port->port.count) { | 530 | usb_fill_bulk_urb(port->read_urb, port->serial->dev, |
535 | usb_fill_bulk_urb(port->read_urb, port->serial->dev, | 531 | usb_rcvbulkpipe(port->serial->dev, |
536 | usb_rcvbulkpipe(port->serial->dev, | 532 | port->bulk_in_endpointAddress), |
537 | port->bulk_in_endpointAddress), | 533 | port->read_urb->transfer_buffer, |
538 | port->read_urb->transfer_buffer, | 534 | port->read_urb->transfer_buffer_length, |
539 | port->read_urb->transfer_buffer_length, | 535 | aircable_read_bulk_callback, port); |
540 | aircable_read_bulk_callback, port); | 536 | |
541 | 537 | result = usb_submit_urb(urb, GFP_ATOMIC); | |
542 | result = usb_submit_urb(urb, GFP_ATOMIC); | 538 | if (result && result != -EPERM) |
543 | if (result) | 539 | dev_err(&urb->dev->dev, |
544 | dev_err(&urb->dev->dev, | 540 | "%s - failed resubmitting read urb, error %d\n", |
545 | "%s - failed resubmitting read urb, error %d\n", | 541 | __func__, result); |
546 | __func__, result); | ||
547 | } | ||
548 | |||
549 | return; | ||
550 | } | 542 | } |
551 | 543 | ||
552 | /* Based on ftdi_sio.c throttle */ | 544 | /* Based on ftdi_sio.c throttle */ |
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c index 3a5d57f89dee..baf74b44e6ed 100644 --- a/drivers/usb/serial/cypress_m8.c +++ b/drivers/usb/serial/cypress_m8.c | |||
@@ -1321,9 +1321,9 @@ static void cypress_read_int_callback(struct urb *urb) | |||
1321 | continue_read: | 1321 | continue_read: |
1322 | tty_kref_put(tty); | 1322 | tty_kref_put(tty); |
1323 | 1323 | ||
1324 | /* Continue trying to always read... unless the port has closed. */ | 1324 | /* Continue trying to always read */ |
1325 | 1325 | ||
1326 | if (port->port.count > 0 && priv->comm_is_ok) { | 1326 | if (priv->comm_is_ok) { |
1327 | usb_fill_int_urb(port->interrupt_in_urb, port->serial->dev, | 1327 | usb_fill_int_urb(port->interrupt_in_urb, port->serial->dev, |
1328 | usb_rcvintpipe(port->serial->dev, | 1328 | usb_rcvintpipe(port->serial->dev, |
1329 | port->interrupt_in_endpointAddress), | 1329 | port->interrupt_in_endpointAddress), |
@@ -1332,7 +1332,7 @@ continue_read: | |||
1332 | cypress_read_int_callback, port, | 1332 | cypress_read_int_callback, port, |
1333 | priv->read_urb_interval); | 1333 | priv->read_urb_interval); |
1334 | result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); | 1334 | result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); |
1335 | if (result) { | 1335 | if (result && result != -EPERM) { |
1336 | dev_err(&urb->dev->dev, "%s - failed resubmitting " | 1336 | dev_err(&urb->dev->dev, "%s - failed resubmitting " |
1337 | "read urb, error %d\n", __func__, | 1337 | "read urb, error %d\n", __func__, |
1338 | result); | 1338 | result); |
diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c index 381722858424..68b0aa5e516c 100644 --- a/drivers/usb/serial/digi_acceleport.c +++ b/drivers/usb/serial/digi_acceleport.c | |||
@@ -1262,10 +1262,10 @@ static void digi_write_bulk_callback(struct urb *urb) | |||
1262 | return; | 1262 | return; |
1263 | } | 1263 | } |
1264 | 1264 | ||
1265 | /* try to send any buffered data on this port, if it is open */ | 1265 | /* try to send any buffered data on this port */ |
1266 | spin_lock(&priv->dp_port_lock); | 1266 | spin_lock(&priv->dp_port_lock); |
1267 | priv->dp_write_urb_in_use = 0; | 1267 | priv->dp_write_urb_in_use = 0; |
1268 | if (port->port.count && priv->dp_out_buf_len > 0) { | 1268 | if (priv->dp_out_buf_len > 0) { |
1269 | *((unsigned char *)(port->write_urb->transfer_buffer)) | 1269 | *((unsigned char *)(port->write_urb->transfer_buffer)) |
1270 | = (unsigned char)DIGI_CMD_SEND_DATA; | 1270 | = (unsigned char)DIGI_CMD_SEND_DATA; |
1271 | *((unsigned char *)(port->write_urb->transfer_buffer) + 1) | 1271 | *((unsigned char *)(port->write_urb->transfer_buffer) + 1) |
@@ -1288,7 +1288,7 @@ static void digi_write_bulk_callback(struct urb *urb) | |||
1288 | schedule_work(&priv->dp_wakeup_work); | 1288 | schedule_work(&priv->dp_wakeup_work); |
1289 | 1289 | ||
1290 | spin_unlock(&priv->dp_port_lock); | 1290 | spin_unlock(&priv->dp_port_lock); |
1291 | if (ret) | 1291 | if (ret && ret != -EPERM) |
1292 | dev_err(&port->dev, | 1292 | dev_err(&port->dev, |
1293 | "%s: usb_submit_urb failed, ret=%d, port=%d\n", | 1293 | "%s: usb_submit_urb failed, ret=%d, port=%d\n", |
1294 | __func__, ret, priv->dp_port_num); | 1294 | __func__, ret, priv->dp_port_num); |
@@ -1353,8 +1353,7 @@ static int digi_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
1353 | struct digi_port *priv = usb_get_serial_port_data(port); | 1353 | struct digi_port *priv = usb_get_serial_port_data(port); |
1354 | struct ktermios not_termios; | 1354 | struct ktermios not_termios; |
1355 | 1355 | ||
1356 | dbg("digi_open: TOP: port=%d, open_count=%d", | 1356 | dbg("digi_open: TOP: port=%d", priv->dp_port_num); |
1357 | priv->dp_port_num, port->port.count); | ||
1358 | 1357 | ||
1359 | /* be sure the device is started up */ | 1358 | /* be sure the device is started up */ |
1360 | if (digi_startup_device(port->serial) != 0) | 1359 | if (digi_startup_device(port->serial) != 0) |
@@ -1393,8 +1392,7 @@ static void digi_close(struct usb_serial_port *port) | |||
1393 | unsigned char buf[32]; | 1392 | unsigned char buf[32]; |
1394 | struct digi_port *priv = usb_get_serial_port_data(port); | 1393 | struct digi_port *priv = usb_get_serial_port_data(port); |
1395 | 1394 | ||
1396 | dbg("digi_close: TOP: port=%d, open_count=%d", | 1395 | dbg("digi_close: TOP: port=%d", priv->dp_port_num); |
1397 | priv->dp_port_num, port->port.count); | ||
1398 | 1396 | ||
1399 | mutex_lock(&port->serial->disc_mutex); | 1397 | mutex_lock(&port->serial->disc_mutex); |
1400 | /* if disconnected, just clear flags */ | 1398 | /* if disconnected, just clear flags */ |
@@ -1629,7 +1627,7 @@ static void digi_read_bulk_callback(struct urb *urb) | |||
1629 | /* continue read */ | 1627 | /* continue read */ |
1630 | urb->dev = port->serial->dev; | 1628 | urb->dev = port->serial->dev; |
1631 | ret = usb_submit_urb(urb, GFP_ATOMIC); | 1629 | ret = usb_submit_urb(urb, GFP_ATOMIC); |
1632 | if (ret != 0) { | 1630 | if (ret != 0 && ret != -EPERM) { |
1633 | dev_err(&port->dev, | 1631 | dev_err(&port->dev, |
1634 | "%s: failed resubmitting urb, ret=%d, port=%d\n", | 1632 | "%s: failed resubmitting urb, ret=%d, port=%d\n", |
1635 | __func__, ret, priv->dp_port_num); | 1633 | __func__, ret, priv->dp_port_num); |
@@ -1662,7 +1660,7 @@ static int digi_read_inb_callback(struct urb *urb) | |||
1662 | 1660 | ||
1663 | /* do not process callbacks on closed ports */ | 1661 | /* do not process callbacks on closed ports */ |
1664 | /* but do continue the read chain */ | 1662 | /* but do continue the read chain */ |
1665 | if (port->port.count == 0) | 1663 | if (urb->status == -ENOENT) |
1666 | return 0; | 1664 | return 0; |
1667 | 1665 | ||
1668 | /* short/multiple packet check */ | 1666 | /* short/multiple packet check */ |
@@ -1767,8 +1765,7 @@ static int digi_read_oob_callback(struct urb *urb) | |||
1767 | 1765 | ||
1768 | tty = tty_port_tty_get(&port->port); | 1766 | tty = tty_port_tty_get(&port->port); |
1769 | rts = 0; | 1767 | rts = 0; |
1770 | if (port->port.count) | 1768 | rts = tty->termios->c_cflag & CRTSCTS; |
1771 | rts = tty->termios->c_cflag & CRTSCTS; | ||
1772 | 1769 | ||
1773 | if (opcode == DIGI_CMD_READ_INPUT_SIGNALS) { | 1770 | if (opcode == DIGI_CMD_READ_INPUT_SIGNALS) { |
1774 | spin_lock(&priv->dp_port_lock); | 1771 | spin_lock(&priv->dp_port_lock); |
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c index 5288203d883f..89fac36684c5 100644 --- a/drivers/usb/serial/generic.c +++ b/drivers/usb/serial/generic.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/usb/serial.h> | 20 | #include <linux/usb/serial.h> |
21 | #include <linux/uaccess.h> | 21 | #include <linux/uaccess.h> |
22 | #include <linux/kfifo.h> | 22 | #include <linux/kfifo.h> |
23 | #include <linux/serial.h> | ||
23 | 24 | ||
24 | static int debug; | 25 | static int debug; |
25 | 26 | ||
@@ -585,7 +586,7 @@ int usb_serial_generic_resume(struct usb_serial *serial) | |||
585 | 586 | ||
586 | for (i = 0; i < serial->num_ports; i++) { | 587 | for (i = 0; i < serial->num_ports; i++) { |
587 | port = serial->port[i]; | 588 | port = serial->port[i]; |
588 | if (!port->port.count) | 589 | if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) |
589 | continue; | 590 | continue; |
590 | 591 | ||
591 | if (port->read_urb) { | 592 | if (port->read_urb) { |
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c index c3e5d506aead..4a0f51974232 100644 --- a/drivers/usb/serial/ir-usb.c +++ b/drivers/usb/serial/ir-usb.c | |||
@@ -445,11 +445,6 @@ static void ir_read_bulk_callback(struct urb *urb) | |||
445 | 445 | ||
446 | dbg("%s - port %d", __func__, port->number); | 446 | dbg("%s - port %d", __func__, port->number); |
447 | 447 | ||
448 | if (!port->port.count) { | ||
449 | dbg("%s - port closed.", __func__); | ||
450 | return; | ||
451 | } | ||
452 | |||
453 | switch (status) { | 448 | switch (status) { |
454 | case 0: /* Successful */ | 449 | case 0: /* Successful */ |
455 | /* | 450 | /* |
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c index f8c4b07033ff..297163c3c610 100644 --- a/drivers/usb/serial/keyspan.c +++ b/drivers/usb/serial/keyspan.c | |||
@@ -464,13 +464,9 @@ static void usa26_indat_callback(struct urb *urb) | |||
464 | 464 | ||
465 | /* Resubmit urb so we continue receiving */ | 465 | /* Resubmit urb so we continue receiving */ |
466 | urb->dev = port->serial->dev; | 466 | urb->dev = port->serial->dev; |
467 | if (port->port.count) { | 467 | err = usb_submit_urb(urb, GFP_ATOMIC); |
468 | err = usb_submit_urb(urb, GFP_ATOMIC); | 468 | if (err != 0) |
469 | if (err != 0) | 469 | dbg("%s - resubmit read urb failed. (%d)", __func__, err); |
470 | dbg("%s - resubmit read urb failed. (%d)", | ||
471 | __func__, err); | ||
472 | } | ||
473 | return; | ||
474 | } | 470 | } |
475 | 471 | ||
476 | /* Outdat handling is common for all devices */ | 472 | /* Outdat handling is common for all devices */ |
@@ -483,8 +479,7 @@ static void usa2x_outdat_callback(struct urb *urb) | |||
483 | p_priv = usb_get_serial_port_data(port); | 479 | p_priv = usb_get_serial_port_data(port); |
484 | dbg("%s - urb %d", __func__, urb == p_priv->out_urbs[1]); | 480 | dbg("%s - urb %d", __func__, urb == p_priv->out_urbs[1]); |
485 | 481 | ||
486 | if (port->port.count) | 482 | usb_serial_port_softint(port); |
487 | usb_serial_port_softint(port); | ||
488 | } | 483 | } |
489 | 484 | ||
490 | static void usa26_inack_callback(struct urb *urb) | 485 | static void usa26_inack_callback(struct urb *urb) |
@@ -615,12 +610,10 @@ static void usa28_indat_callback(struct urb *urb) | |||
615 | 610 | ||
616 | /* Resubmit urb so we continue receiving */ | 611 | /* Resubmit urb so we continue receiving */ |
617 | urb->dev = port->serial->dev; | 612 | urb->dev = port->serial->dev; |
618 | if (port->port.count) { | 613 | err = usb_submit_urb(urb, GFP_ATOMIC); |
619 | err = usb_submit_urb(urb, GFP_ATOMIC); | 614 | if (err != 0) |
620 | if (err != 0) | 615 | dbg("%s - resubmit read urb failed. (%d)", |
621 | dbg("%s - resubmit read urb failed. (%d)", | 616 | __func__, err); |
622 | __func__, err); | ||
623 | } | ||
624 | p_priv->in_flip ^= 1; | 617 | p_priv->in_flip ^= 1; |
625 | 618 | ||
626 | urb = p_priv->in_urbs[p_priv->in_flip]; | 619 | urb = p_priv->in_urbs[p_priv->in_flip]; |
@@ -856,12 +849,9 @@ static void usa49_indat_callback(struct urb *urb) | |||
856 | 849 | ||
857 | /* Resubmit urb so we continue receiving */ | 850 | /* Resubmit urb so we continue receiving */ |
858 | urb->dev = port->serial->dev; | 851 | urb->dev = port->serial->dev; |
859 | if (port->port.count) { | 852 | err = usb_submit_urb(urb, GFP_ATOMIC); |
860 | err = usb_submit_urb(urb, GFP_ATOMIC); | 853 | if (err != 0) |
861 | if (err != 0) | 854 | dbg("%s - resubmit read urb failed. (%d)", __func__, err); |
862 | dbg("%s - resubmit read urb failed. (%d)", | ||
863 | __func__, err); | ||
864 | } | ||
865 | } | 855 | } |
866 | 856 | ||
867 | static void usa49wg_indat_callback(struct urb *urb) | 857 | static void usa49wg_indat_callback(struct urb *urb) |
@@ -904,11 +894,7 @@ static void usa49wg_indat_callback(struct urb *urb) | |||
904 | /* no error on any byte */ | 894 | /* no error on any byte */ |
905 | i++; | 895 | i++; |
906 | for (x = 1; x < len ; ++x) | 896 | for (x = 1; x < len ; ++x) |
907 | if (port->port.count) | 897 | tty_insert_flip_char(tty, data[i++], 0); |
908 | tty_insert_flip_char(tty, | ||
909 | data[i++], 0); | ||
910 | else | ||
911 | i++; | ||
912 | } else { | 898 | } else { |
913 | /* | 899 | /* |
914 | * some bytes had errors, every byte has status | 900 | * some bytes had errors, every byte has status |
@@ -922,14 +908,12 @@ static void usa49wg_indat_callback(struct urb *urb) | |||
922 | if (stat & RXERROR_PARITY) | 908 | if (stat & RXERROR_PARITY) |
923 | flag |= TTY_PARITY; | 909 | flag |= TTY_PARITY; |
924 | /* XXX should handle break (0x10) */ | 910 | /* XXX should handle break (0x10) */ |
925 | if (port->port.count) | 911 | tty_insert_flip_char(tty, |
926 | tty_insert_flip_char(tty, | ||
927 | data[i+1], flag); | 912 | data[i+1], flag); |
928 | i += 2; | 913 | i += 2; |
929 | } | 914 | } |
930 | } | 915 | } |
931 | if (port->port.count) | 916 | tty_flip_buffer_push(tty); |
932 | tty_flip_buffer_push(tty); | ||
933 | tty_kref_put(tty); | 917 | tty_kref_put(tty); |
934 | } | 918 | } |
935 | } | 919 | } |
@@ -1013,13 +997,9 @@ static void usa90_indat_callback(struct urb *urb) | |||
1013 | 997 | ||
1014 | /* Resubmit urb so we continue receiving */ | 998 | /* Resubmit urb so we continue receiving */ |
1015 | urb->dev = port->serial->dev; | 999 | urb->dev = port->serial->dev; |
1016 | if (port->port.count) { | 1000 | err = usb_submit_urb(urb, GFP_ATOMIC); |
1017 | err = usb_submit_urb(urb, GFP_ATOMIC); | 1001 | if (err != 0) |
1018 | if (err != 0) | 1002 | dbg("%s - resubmit read urb failed. (%d)", __func__, err); |
1019 | dbg("%s - resubmit read urb failed. (%d)", | ||
1020 | __func__, err); | ||
1021 | } | ||
1022 | return; | ||
1023 | } | 1003 | } |
1024 | 1004 | ||
1025 | 1005 | ||
@@ -2418,8 +2398,7 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial, | |||
2418 | msg.portEnabled = 0; | 2398 | msg.portEnabled = 0; |
2419 | /* Sending intermediate configs */ | 2399 | /* Sending intermediate configs */ |
2420 | else { | 2400 | else { |
2421 | if (port->port.count) | 2401 | msg.portEnabled = 1; |
2422 | msg.portEnabled = 1; | ||
2423 | msg.txBreak = (p_priv->break_on); | 2402 | msg.txBreak = (p_priv->break_on); |
2424 | } | 2403 | } |
2425 | 2404 | ||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 68c7457a98ae..db0541c5df79 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -971,9 +971,9 @@ static void option_indat_callback(struct urb *urb) | |||
971 | tty_kref_put(tty); | 971 | tty_kref_put(tty); |
972 | 972 | ||
973 | /* Resubmit urb so we continue receiving */ | 973 | /* Resubmit urb so we continue receiving */ |
974 | if (port->port.count && status != -ESHUTDOWN) { | 974 | if (status != -ESHUTDOWN) { |
975 | err = usb_submit_urb(urb, GFP_ATOMIC); | 975 | err = usb_submit_urb(urb, GFP_ATOMIC); |
976 | if (err) | 976 | if (err && err != -EPERM) |
977 | printk(KERN_ERR "%s: resubmit read urb failed. " | 977 | printk(KERN_ERR "%s: resubmit read urb failed. " |
978 | "(%d)", __func__, err); | 978 | "(%d)", __func__, err); |
979 | else | 979 | else |
diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c index 839733431832..deeacdea05db 100644 --- a/drivers/usb/serial/oti6858.c +++ b/drivers/usb/serial/oti6858.c | |||
@@ -585,9 +585,6 @@ static int oti6858_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
585 | usb_clear_halt(serial->dev, port->write_urb->pipe); | 585 | usb_clear_halt(serial->dev, port->write_urb->pipe); |
586 | usb_clear_halt(serial->dev, port->read_urb->pipe); | 586 | usb_clear_halt(serial->dev, port->read_urb->pipe); |
587 | 587 | ||
588 | if (port->port.count != 1) | ||
589 | return 0; | ||
590 | |||
591 | buf = kmalloc(OTI6858_CTRL_PKT_SIZE, GFP_KERNEL); | 588 | buf = kmalloc(OTI6858_CTRL_PKT_SIZE, GFP_KERNEL); |
592 | if (buf == NULL) { | 589 | if (buf == NULL) { |
593 | dev_err(&port->dev, "%s(): out of memory!\n", __func__); | 590 | dev_err(&port->dev, "%s(): out of memory!\n", __func__); |
@@ -934,10 +931,6 @@ static void oti6858_read_bulk_callback(struct urb *urb) | |||
934 | spin_unlock_irqrestore(&priv->lock, flags); | 931 | spin_unlock_irqrestore(&priv->lock, flags); |
935 | 932 | ||
936 | if (status != 0) { | 933 | if (status != 0) { |
937 | if (!port->port.count) { | ||
938 | dbg("%s(): port is closed, exiting", __func__); | ||
939 | return; | ||
940 | } | ||
941 | /* | 934 | /* |
942 | if (status == -EPROTO) { | 935 | if (status == -EPROTO) { |
943 | * PL2303 mysteriously fails with -EPROTO reschedule | 936 | * PL2303 mysteriously fails with -EPROTO reschedule |
@@ -961,14 +954,12 @@ static void oti6858_read_bulk_callback(struct urb *urb) | |||
961 | } | 954 | } |
962 | tty_kref_put(tty); | 955 | tty_kref_put(tty); |
963 | 956 | ||
964 | /* schedule the interrupt urb if we are still open */ | 957 | /* schedule the interrupt urb */ |
965 | if (port->port.count != 0) { | 958 | port->interrupt_in_urb->dev = port->serial->dev; |
966 | port->interrupt_in_urb->dev = port->serial->dev; | 959 | result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); |
967 | result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); | 960 | if (result != 0 && result != -EPERM) { |
968 | if (result != 0) { | 961 | dev_err(&port->dev, "%s(): usb_submit_urb() failed," |
969 | dev_err(&port->dev, "%s(): usb_submit_urb() failed," | 962 | " error %d\n", __func__, result); |
970 | " error %d\n", __func__, result); | ||
971 | } | ||
972 | } | 963 | } |
973 | } | 964 | } |
974 | 965 | ||
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index a3e5a56dc066..571dcf182866 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
@@ -1071,10 +1071,6 @@ static void pl2303_read_bulk_callback(struct urb *urb) | |||
1071 | 1071 | ||
1072 | if (status) { | 1072 | if (status) { |
1073 | dbg("%s - urb status = %d", __func__, status); | 1073 | dbg("%s - urb status = %d", __func__, status); |
1074 | if (!port->port.count) { | ||
1075 | dbg("%s - port is closed, exiting.", __func__); | ||
1076 | return; | ||
1077 | } | ||
1078 | if (status == -EPROTO) { | 1074 | if (status == -EPROTO) { |
1079 | /* PL2303 mysteriously fails with -EPROTO reschedule | 1075 | /* PL2303 mysteriously fails with -EPROTO reschedule |
1080 | * the read */ | 1076 | * the read */ |
@@ -1107,15 +1103,11 @@ static void pl2303_read_bulk_callback(struct urb *urb) | |||
1107 | } | 1103 | } |
1108 | tty_kref_put(tty); | 1104 | tty_kref_put(tty); |
1109 | /* Schedule the next read _if_ we are still open */ | 1105 | /* Schedule the next read _if_ we are still open */ |
1110 | if (port->port.count) { | 1106 | urb->dev = port->serial->dev; |
1111 | urb->dev = port->serial->dev; | 1107 | result = usb_submit_urb(urb, GFP_ATOMIC); |
1112 | result = usb_submit_urb(urb, GFP_ATOMIC); | 1108 | if (result && result != -EPERM) |
1113 | if (result) | 1109 | dev_err(&urb->dev->dev, "%s - failed resubmitting" |
1114 | dev_err(&urb->dev->dev, "%s - failed resubmitting" | 1110 | " read urb, error %d\n", __func__, result); |
1115 | " read urb, error %d\n", __func__, result); | ||
1116 | } | ||
1117 | |||
1118 | return; | ||
1119 | } | 1111 | } |
1120 | 1112 | ||
1121 | static void pl2303_write_bulk_callback(struct urb *urb) | 1113 | static void pl2303_write_bulk_callback(struct urb *urb) |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index c012e51665bd..34e6f894cba9 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
@@ -610,10 +610,10 @@ static void sierra_indat_callback(struct urb *urb) | |||
610 | } | 610 | } |
611 | 611 | ||
612 | /* Resubmit urb so we continue receiving */ | 612 | /* Resubmit urb so we continue receiving */ |
613 | if (port->port.count && status != -ESHUTDOWN && status != -EPERM) { | 613 | if (status != -ESHUTDOWN && status != -EPERM) { |
614 | usb_mark_last_busy(port->serial->dev); | 614 | usb_mark_last_busy(port->serial->dev); |
615 | err = usb_submit_urb(urb, GFP_ATOMIC); | 615 | err = usb_submit_urb(urb, GFP_ATOMIC); |
616 | if (err) | 616 | if (err && err != -EPERM) |
617 | dev_err(&port->dev, "resubmit read urb failed." | 617 | dev_err(&port->dev, "resubmit read urb failed." |
618 | "(%d)\n", err); | 618 | "(%d)\n", err); |
619 | } | 619 | } |
@@ -672,11 +672,11 @@ static void sierra_instat_callback(struct urb *urb) | |||
672 | dev_dbg(&port->dev, "%s: error %d\n", __func__, status); | 672 | dev_dbg(&port->dev, "%s: error %d\n", __func__, status); |
673 | 673 | ||
674 | /* Resubmit urb so we continue receiving IRQ data */ | 674 | /* Resubmit urb so we continue receiving IRQ data */ |
675 | if (port->port.count && status != -ESHUTDOWN && status != -ENOENT) { | 675 | if (status != -ESHUTDOWN && status != -ENOENT) { |
676 | usb_mark_last_busy(serial->dev); | 676 | usb_mark_last_busy(serial->dev); |
677 | urb->dev = serial->dev; | 677 | urb->dev = serial->dev; |
678 | err = usb_submit_urb(urb, GFP_ATOMIC); | 678 | err = usb_submit_urb(urb, GFP_ATOMIC); |
679 | if (err) | 679 | if (err && err != -EPERM) |
680 | dev_err(&port->dev, "%s: resubmit intr urb " | 680 | dev_err(&port->dev, "%s: resubmit intr urb " |
681 | "failed. (%d)\n", __func__, err); | 681 | "failed. (%d)\n", __func__, err); |
682 | } | 682 | } |
diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c index cf508e26f1c6..5d39191e7244 100644 --- a/drivers/usb/serial/spcp8x5.c +++ b/drivers/usb/serial/spcp8x5.c | |||
@@ -686,8 +686,6 @@ static void spcp8x5_read_bulk_callback(struct urb *urb) | |||
686 | 686 | ||
687 | /* check the urb status */ | 687 | /* check the urb status */ |
688 | if (result) { | 688 | if (result) { |
689 | if (!port->port.count) | ||
690 | return; | ||
691 | if (result == -EPROTO) { | 689 | if (result == -EPROTO) { |
692 | /* spcp8x5 mysteriously fails with -EPROTO */ | 690 | /* spcp8x5 mysteriously fails with -EPROTO */ |
693 | /* reschedule the read */ | 691 | /* reschedule the read */ |
@@ -734,16 +732,11 @@ static void spcp8x5_read_bulk_callback(struct urb *urb) | |||
734 | } | 732 | } |
735 | tty_kref_put(tty); | 733 | tty_kref_put(tty); |
736 | 734 | ||
737 | /* Schedule the next read _if_ we are still open */ | 735 | /* Schedule the next read */ |
738 | if (port->port.count) { | 736 | urb->dev = port->serial->dev; |
739 | urb->dev = port->serial->dev; | 737 | result = usb_submit_urb(urb , GFP_ATOMIC); |
740 | result = usb_submit_urb(urb , GFP_ATOMIC); | 738 | if (result) |
741 | if (result) | 739 | dev_dbg(&port->dev, "failed submitting read urb %d\n", result); |
742 | dev_dbg(&port->dev, "failed submitting read urb %d\n", | ||
743 | result); | ||
744 | } | ||
745 | |||
746 | return; | ||
747 | } | 740 | } |
748 | 741 | ||
749 | /* get data from ring buffer and then write to usb bus */ | 742 | /* get data from ring buffer and then write to usb bus */ |