From: Oliver Neukum <[EMAIL PROTECTED]>

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 );
                }
        }
 
-- 
1.5.2.2


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to