Thanks.  I will look at this patch this weekend.

-- Al

Quoting Oliver Neukum <[EMAIL PROTECTED]>:

> Hi,
>
> this fixes the flushing trouble due to its own buffering for this driver.
>
>       Regards
>               Oliver
> Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]>
> --
>
> --- a/drivers/usb/serial/digi_acceleport.c    2007-05-07 12:27:23.000000000
> +0200
> +++ b/drivers/usb/serial/digi_acceleport.c    2007-05-07 13:10:57.000000000
> +0200
> @@ -930,23 +930,17 @@ static void digi_rx_unthrottle( struct u
>  {
>
>       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",
>               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( struc
>               /* 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 );
>               }
>       }
>
>




-------------------------------------------------------------------------
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