diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2008-04-08 12:16:06 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-04-25 00:16:55 -0400 |
commit | a5b6f60c5a30c494017c7a2d11c4067f90d3d0df (patch) | |
tree | 2f80d1a6c2655c5c12f40cafbc47516284934d42 /drivers/usb/serial/option.c | |
parent | 441b62c1edb986827154768d89bbac0ba779984f (diff) |
usb serial: more fixes and groundwork for tty changes
- If a termios change fails due to lack of memory we should copy the
old settings back over as the device has not changed
- Note various locking problems
- kl5kusb105 had various remaining tty flag handling problems
- Make safe_serial use tty_insert_flip_string not open coded loops
- set termios speed properly in usb_serial
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial/option.c')
-rw-r--r-- | drivers/usb/serial/option.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 920241897c95..a83892627d66 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -656,6 +656,7 @@ static int option_write_room(struct usb_serial_port *port) | |||
656 | 656 | ||
657 | portdata = usb_get_serial_port_data(port); | 657 | portdata = usb_get_serial_port_data(port); |
658 | 658 | ||
659 | |||
659 | for (i=0; i < N_OUT_URB; i++) { | 660 | for (i=0; i < N_OUT_URB; i++) { |
660 | this_urb = portdata->out_urbs[i]; | 661 | this_urb = portdata->out_urbs[i]; |
661 | if (this_urb && !test_bit(i, &portdata->out_busy)) | 662 | if (this_urb && !test_bit(i, &portdata->out_busy)) |
@@ -677,6 +678,8 @@ static int option_chars_in_buffer(struct usb_serial_port *port) | |||
677 | 678 | ||
678 | for (i=0; i < N_OUT_URB; i++) { | 679 | for (i=0; i < N_OUT_URB; i++) { |
679 | this_urb = portdata->out_urbs[i]; | 680 | this_urb = portdata->out_urbs[i]; |
681 | /* FIXME: This locking is insufficient as this_urb may | ||
682 | go unused during the test */ | ||
680 | if (this_urb && test_bit(i, &portdata->out_busy)) | 683 | if (this_urb && test_bit(i, &portdata->out_busy)) |
681 | data_len += this_urb->transfer_buffer_length; | 684 | data_len += this_urb->transfer_buffer_length; |
682 | } | 685 | } |