On Saturday 05 May 2007, Oliver Neukum wrote: >Am Samstag, 5. Mai 2007 20:08 schrieb Antonino Ingargiola: >> Now I don't want to abuse your kindness, but I (personally) would be >> *really* interested in a similar fix for the FTDI usb-serial driver, >> because many measurements I do use an FTDI device. > >Does this work? > > Regards > Oliver >---- > >--- a/drivers/usb/serial/ftdi_sio.c 2007-05-05 20:21:41.000000000 +0200 >+++ b/drivers/usb/serial/ftdi_sio.c 2007-05-05 20:27:09.000000000 +0200 >@@ -1749,10 +1749,6 @@ static void ftdi_process_read (struct wo > length = 0; > } > >- if (priv->rx_flags & THROTTLED) { >- dbg("%s - throttled", __FUNCTION__); >- break; >- } > if (tty_buffer_request_room(tty, length) < length) { > /* break out & wait for throttling/unthrottling to > happen */ > dbg("%s - receive room low", __FUNCTION__); >@@ -1825,16 +1821,6 @@ static void ftdi_process_read (struct wo > dbg("%s - incomplete, %d bytes processed, %d remain", > __FUNCTION__, packet_offset, > urb->actual_length - packet_offset); >- /* check if we were throttled while processing */ >- spin_lock_irqsave(&priv->rx_lock, flags); >- if (priv->rx_flags & THROTTLED) { >- priv->rx_flags |= ACTUALLY_THROTTLED; >- spin_unlock_irqrestore(&priv->rx_lock, flags); >- dbg("%s - deferring remainder until unthrottled", >- __FUNCTION__); >- return; >- } >- spin_unlock_irqrestore(&priv->rx_lock, flags); > /* if the port is closed stop trying to read */ > if (port->open_count > 0){ > /* delay processing of remainder */ >@@ -1856,9 +1842,15 @@ static void ftdi_process_read (struct wo > port->read_urb->transfer_buffer, > port->read_urb->transfer_buffer_length, ftdi_read_bulk_callback, port); > >- result = usb_submit_urb(port->read_urb, GFP_ATOMIC); >- if (result) >- err("%s - failed resubmitting read urb, error %d", >__FUNCTION__, > result); + spin_lock_irqsave(&priv->rx_lock, flags); >+ if (priv->rx_flags & THROTTLED) { >+ priv->rx_flags |= ACTUALLY_THROTTLED; >+ } else { >+ result = usb_submit_urb(port->read_urb, GFP_ATOMIC); >+ if (result) >+ err("%s - failed resubmitting read urb, error >%d", __FUNCTION__, > result); + } >+ spin_unlock_irqrestore(&priv->rx_lock, flags); > } > > return; >-
Oliver: Sort of late, but, I have a couple of kernels building with this patch applied, one with the sd-0.48 patch where FTDI stuff is a 40+% cpu hog and can't be used, and one with the cfs-v10 patch where it can be co-erced into working if I screw with it enough. I have also been using another serial patch that for unk reasons, also helps the usb-serial case here, but vger won't let me repost that without stripping off the headers. That patch has some resemblance to this:8250-clear-on-read-bits-LSR-MSR where I usually replace spaces with dashes so I don't have to use "to surround the name" in my scripts. So these test kernels will have both patches. I'll let you know how they work later this morning. -- Cheers, Gene "There are four boxes to be used in defense of liberty: soap, ballot, jury, and ammo. Please use in that order." -Ed Howdershelt (Author) Oh my GOD -- the SUN just fell into YANKEE STADIUM!! - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/