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/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel