Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=39892da44b21b5362eb848ca424d73a25ccc488f Commit: 39892da44b21b5362eb848ca424d73a25ccc488f Parent: b308e74d9c708ee2a9af14fbe235e0a41216f4ed Author: Oliver Neukum <[EMAIL PROTECTED]> AuthorDate: Mon May 7 13:16:58 2007 +0200 Committer: Greg Kroah-Hartman <[EMAIL PROTECTED]> CommitDate: Thu Jul 12 16:29:51 2007 -0700
USB: Digi AccelePort adapted to new tty buffering this fixes the flushing trouble due to its own buffering for this driver. Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]> Cc: Al Borchers <[EMAIL PROTECTED]> Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]> --- drivers/usb/serial/digi_acceleport.c | 52 ++++++++------------------------- 1 files changed, 13 insertions(+), 39 deletions(-) diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c index d78692c..9ffd99a 100644 --- a/drivers/usb/serial/digi_acceleport.c +++ b/drivers/usb/serial/digi_acceleport.c @@ -930,23 +930,17 @@ static void digi_rx_unthrottle( struct usb_serial_port *port ) { int ret = 0; - int len; unsigned long flags; struct digi_port *priv = usb_get_serial_port_data(port); - struct tty_struct *tty = port->tty; - dbg( "digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num ); spin_lock_irqsave( &priv->dp_port_lock, flags ); - /* send any buffered chars from throttle time on to tty subsystem */ - - len = tty_buffer_request_room(tty, priv->dp_in_buf_len); - if( len > 0 ) { - tty_insert_flip_string_flags(tty, priv->dp_in_buf, priv->dp_in_flag_buf, len); - tty_flip_buffer_push( tty ); - } + /* turn throttle off */ + priv->dp_throttled = 0; + priv->dp_in_buf_len = 0; + priv->dp_throttle_restart = 0; /* restart read chain */ if( priv->dp_throttle_restart ) { @@ -954,11 +948,6 @@ dbg( "digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num ); ret = usb_submit_urb( port->read_urb, GFP_ATOMIC ); } - /* turn throttle off */ - priv->dp_throttled = 0; - priv->dp_in_buf_len = 0; - priv->dp_throttle_restart = 0; - spin_unlock_irqrestore( &priv->dp_port_lock, flags ); if( ret ) { @@ -1864,31 +1853,16 @@ static int digi_read_inb_callback( struct urb *urb ) /* data length is len-1 (one byte of len is status) */ --len; - if( throttled ) { - - len = min( len, - DIGI_IN_BUF_SIZE - priv->dp_in_buf_len ); - - if( len > 0 ) { - memcpy( priv->dp_in_buf + priv->dp_in_buf_len, - data, len ); - memset( priv->dp_in_flag_buf - + priv->dp_in_buf_len, flag, len ); - priv->dp_in_buf_len += len; - } - - } else { - len = tty_buffer_request_room(tty, len); - if( len > 0 ) { - /* Hot path */ - if(flag == TTY_NORMAL) - tty_insert_flip_string(tty, data, len); - else { - for(i = 0; i < len; i++) - tty_insert_flip_char(tty, data[i], flag); - } - tty_flip_buffer_push( tty ); + len = tty_buffer_request_room(tty, len); + if( len > 0 ) { + /* Hot path */ + if(flag == TTY_NORMAL) + tty_insert_flip_string(tty, data, len); + else { + for(i = 0; i < len; i++) + tty_insert_flip_char(tty, data[i], flag); } + tty_flip_buffer_push( tty ); } } - To unsubscribe from this list: send the line "unsubscribe git-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html