* [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug]
@ 2007-05-04 8:38 Antonino Ingargiola
2007-05-04 8:49 ` Oliver Neukum
0 siblings, 1 reply; 59+ messages in thread
From: Antonino Ingargiola @ 2007-05-04 8:38 UTC (permalink / raw)
To: linux-usb-users; +Cc: linux-kernel
Hi,
On 4/14/07, Antonino Ingargiola <tritemio@gmail.com> wrote:
> Hi to the list,
>
> I report a problem found with a device that use the FTDI chip to
> communicate data to pc.
>
<summary of snipped problem description>
The scenario is: a serial device streams data continuously toward the
pc. The application requires the data be read once in a while (so not
all data is read). There is a corruption reading the data (old data
mixed with the new one).
The problem is absent in windows (using the same HW device and python code).
<end summary>
I report for reference how I solved the problem.
The problem arises because (while not reading) the input stream fills
the input buffer. Once filled, the buffer does not accept new data, so
the lost data is the new one not the old.
When one need to read the data he flushes the input buffer, but this
is not sufficient. In fact there is a second (hardware?) buffer in the
chain that, suddenly after the flush, pushes a chunk of old data in to
the input buffer. After this the new data is queued. This result in
data corruption at the edge between the new and the old data in the
buffer.
The problem has been reproduced also with an usb-serial device using
the cdc-acm driver and with two serial port linked by a null-modem
cable (so its not FTDI specific).
To solve the problem we must do a complete flush of all the buffer
chain. I do this flushing the input multiple times with a small pause
between them. In my case 10 flushes separated by a 10ms pause always
empties the whole buffer chain, so I get no corruption anymore. I'ts
not an elegant solution but it works (10 flushes are an overkill but I
want to be _really_ sure to read the correct data).
If someone know a better way to solve the problem is more than welcome
to suggest. Furthermore just a confirmation of my analysis of the
serial buffer behavior would be appreciated.
What puzzled me at first was that on windows the "flush" flushes all
the buffers, so the problem does not arises. Maybe Linux serial stack
works this way because is dictated by the POSIX standard ... I don't
know, just guessing.
Thanks,
~ Antonio
PS: For reference, the original report was:
http://marc.info/?l=linux-kernel&m=117683012421931&w=2
^ permalink raw reply [flat|nested] 59+ messages in thread* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 8:38 [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] Antonino Ingargiola @ 2007-05-04 8:49 ` Oliver Neukum [not found] ` <5486cca80705040229g53933671m658bd028cadca155@mail.gmail.com> 0 siblings, 1 reply; 59+ messages in thread From: Oliver Neukum @ 2007-05-04 8:49 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: linux-usb-users, linux-kernel Am Freitag, 4. Mai 2007 10:38 schrieb Antonino Ingargiola: > To solve the problem we must do a complete flush of all the buffer > chain. I do this flushing the input multiple times with a small pause > between them. In my case 10 flushes separated by a 10ms pause always > empties the whole buffer chain, so I get no corruption anymore. I'ts > not an elegant solution but it works (10 flushes are an overkill but I > want to be _really_ sure to read the correct data). How do you flush the buffers? Simply reading them out? Regards Oliver ^ permalink raw reply [flat|nested] 59+ messages in thread
[parent not found: <5486cca80705040229g53933671m658bd028cadca155@mail.gmail.com>]
* [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] [not found] ` <5486cca80705040229g53933671m658bd028cadca155@mail.gmail.com> @ 2007-05-04 9:33 ` Antonino Ingargiola 2007-05-04 13:41 ` Oliver Neukum 2007-05-04 14:45 ` Paul Fulghum 0 siblings, 2 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 9:33 UTC (permalink / raw) To: linux-usb-users, linux-kernel Accidentally I've replied privately, sorry. Forwarding to ML... ---------- Forwarded message ---------- From: Antonino Ingargiola <tritemio@gmail.com> Date: May 4, 2007 11:29 AM Subject: Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] To: Oliver Neukum <oliver@neukum.org> On 5/4/07, Oliver Neukum <oliver@neukum.org> wrote: > Am Freitag, 4. Mai 2007 10:38 schrieb Antonino Ingargiola: > > To solve the problem we must do a complete flush of all the buffer > > chain. I do this flushing the input multiple times with a small pause > > between them. In my case 10 flushes separated by a 10ms pause always > > empties the whole buffer chain, so I get no corruption anymore. I'ts > > not an elegant solution but it works (10 flushes are an overkill but I > > want to be _really_ sure to read the correct data). > > How do you flush the buffers? Simply reading them out? Nope. In python I use the flushInput() method of the serial object defined by the pyserial library[0]. The method does just this system call: termios.tcflush(self.fd, TERMIOS.TCIFLUSH) that I think is correct. Cheers, ~ Antonio [0]: http://pyserial.sourceforge.net/ (or python-serial debian package) ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 9:33 ` Antonino Ingargiola @ 2007-05-04 13:41 ` Oliver Neukum 2007-05-04 14:45 ` Paul Fulghum 1 sibling, 0 replies; 59+ messages in thread From: Oliver Neukum @ 2007-05-04 13:41 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: linux-usb-users, linux-kernel > > How do you flush the buffers? Simply reading them out? > > Nope. In python I use the flushInput() method of the serial object > defined by the pyserial library[0]. The method does just this system > call: > > termios.tcflush(self.fd, TERMIOS.TCIFLUSH) case TCFLSH: retval = tty_check_change(tty); if (retval) return retval; ld = tty_ldisc_ref(tty); switch (arg) { case TCIFLUSH: if (ld && ld->flush_buffer) ld->flush_buffer(tty); break; case TCIOFLUSH: if (ld && ld->flush_buffer) ld->flush_buffer(tty); /* fall through */ case TCOFLUSH: if (tty->driver->flush_buffer) tty->driver->flush_buffer(tty); break; default: tty_ldisc_deref(ld); return -EINVAL; } tty_ldisc_deref(ld); return 0; Most likely you were using n_tty. static void n_tty_flush_buffer(struct tty_struct * tty) { /* clear everything and unthrottle the driver */ reset_buffer_flags(tty); if (!tty->link) return; if (tty->link->packet) { tty->ctrl_status |= TIOCPKT_FLUSHREAD; wake_up_interruptible(&tty->link->read_wait); } } It sets TIOCPKT_FLUSHREAD, which is used nowhere else in the kernel. And I am confused. Could somebody who has some experience in the tty layer comment on that? Regards Oliver ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 9:33 ` Antonino Ingargiola 2007-05-04 13:41 ` Oliver Neukum @ 2007-05-04 14:45 ` Paul Fulghum 2007-05-04 14:56 ` Paul Fulghum 1 sibling, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 14:45 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: linux-usb-users, linux-kernel Antonino Ingargiola wrote: > Nope. In python I use the flushInput() method of the serial object > defined by the pyserial library[0]. The method does just this system > call: > > termios.tcflush(self.fd, TERMIOS.TCIFLUSH) > > that I think is correct. There is intermediate buffering between the driver and the line discipline called the tty flip buffer. receive data flow: driver --> tty flip --> line discipline --> application When you flush input, the line disciplines flush_buffer() method is called to clear any data residing the in the line discipline. This does not affect the tty flip buffer or hardware receive FIFOs. I suspect the biggest problem is the data in the tty flip buffer. A new function to flush the tty flip buffer needs to be added and then called from tty_io.c:tty_ldisc_flush(). Then a call to tcflush(TCIFLUSH) will clear both buffers. This still would not clear any data in the hardware receive FIFOs. -- Paul Fulghum Microgate Systems, Ltd. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 14:45 ` Paul Fulghum @ 2007-05-04 14:56 ` Paul Fulghum 2007-05-04 14:49 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 14:56 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: linux-usb-users, linux-kernel Paul Fulghum wrote: > A new function to flush the tty flip buffer needs to > be added and then called from tty_io.c:tty_ldisc_flush(). That is not enough. It looks like tty_ioctl() needs to process ioctl(TCFLSH) to clear the flip buffer before passing that ioctl to the line discipline. -- Paul Fulghum Microgate Systems, Ltd. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 14:56 ` Paul Fulghum @ 2007-05-04 14:49 ` Paul Fulghum 2007-05-04 16:04 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 14:49 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel Here is a patch against 2.6.21 which flushes the tty flip buffer on ioctl(TCFLSH) for input. --- a/drivers/char/tty_io.c 2007-04-25 22:08:32.000000000 -0500 +++ b/drivers/char/tty_io.c 2007-05-04 09:30:01.000000000 -0500 @@ -365,6 +365,28 @@ static void tty_buffer_free(struct tty_s } /** + * tty_buffer_flush - flush full tty buffers + * @tty: tty to flush + * + * flush all the buffers containing receive data + * + * Locking: none + */ + +static void tty_buffer_flush(struct tty_struct *tty) +{ + struct tty_buffer *thead; + unsigned long flags; + + spin_lock_irqsave(&tty->buf.lock, flags); + while((thead = tty->buf.head) != NULL) { + tty->buf.head = thead->next; + tty_buffer_free(tty, thead); + } + spin_unlock_irqrestore(&tty->buf.lock, flags); +} + +/** * tty_buffer_find - find a free tty buffer * @tty: tty owning the buffer * @size: characters wanted @@ -1240,6 +1262,7 @@ void tty_ldisc_flush(struct tty_struct * ld->flush_buffer(tty); tty_ldisc_deref(ld); } + tty_buffer_flush(tty); } EXPORT_SYMBOL_GPL(tty_ldisc_flush); @@ -3336,6 +3359,15 @@ int tty_ioctl(struct inode * inode, stru case TIOCMBIC: case TIOCMBIS: return tty_tiocmset(tty, file, cmd, p); + case TCFLSH: + switch (arg) { + case TCIFLUSH: + case TCIOFLUSH: + /* flush tty buffer and allow ldisc to process ioctl */ + tty_buffer_flush(tty); + break; + } + break; } if (tty->driver->ioctl) { retval = (tty->driver->ioctl)(tty, file, cmd, arg); ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 14:49 ` Paul Fulghum @ 2007-05-04 16:04 ` Antonino Ingargiola 2007-05-04 16:56 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 16:04 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > Here is a patch against 2.6.21 which flushes the tty flip buffer > on ioctl(TCFLSH) for input. > > --- a/drivers/char/tty_io.c 2007-04-25 22:08:32.000000000 -0500 > +++ b/drivers/char/tty_io.c 2007-05-04 09:30:01.000000000 -0500 <snip> Thanks! I've applied the patch and I'm building the kernel. I'll report the result. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 16:04 ` Antonino Ingargiola @ 2007-05-04 16:56 ` Antonino Ingargiola 2007-05-04 18:02 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 16:56 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel [-- Attachment #1: Type: text/plain, Size: 2324 bytes --] On 5/4/07, Antonino Ingargiola <tritemio@gmail.com> wrote: > On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > > Here is a patch against 2.6.21 which flushes the tty flip buffer > > on ioctl(TCFLSH) for input. > > > > --- a/drivers/char/tty_io.c 2007-04-25 22:08:32.000000000 -0500 > > +++ b/drivers/char/tty_io.c 2007-05-04 09:30:01.000000000 -0500 > <snip> > > Thanks! I've applied the patch and I'm building the kernel. I'll > report the result. The system blocks during booting. I can unblock it with SysReq+K but then I'm unable to log into X. The boot messages seems ok (full gzipped boot log attached): Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled kernel: serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A kernel: serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A kernel: 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A kernel: 00:09: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A and when I pres the emergency keys: kernel: EXT3-fs: mounted filesystem with ordered data mode. kernel: eth0: link up, 10Mbps, half-duplex, lpa 0x0000 kernel: NET: Registered protocol family 10 kernel: SysRq : SAK kernel: SAK: killed process 1511 (vt-is-UTF8): process_session(p)==tty->session kernel: SAK: killed process 1508 (unicode_start): process_session(p)==tty->session kernel: SAK: killed process 1409 (sh): process_session(p)==tty->session kernel: SAK: killed process 301 (rc): process_session(p)==tty->session kernel: SAK: killed process 298 (init): process_session(p)==tty->session kernel: SAK: killed process 298 (init): process_session(p)==tty->session kernel: SAK: killed process 301 (rc): process_session(p)==tty->session kernel: SAK: killed process 1409 (sh): process_session(p)==tty->session kernel: SAK: killed process 1508 (unicode_start): process_session(p)==tty->session kernel: SAK: killed process 1511 (vt-is-UTF8): process_session(p)==tty->session kernel: ACPI: Processor [CPU0] (supports 2 throttling states) kernel: [drm] Initialized drm 1.1.0 20060810 kernel: [drm] Initialized radeon 1.25.0 20060524 on minor 0 kernel: input: Power Button (FF) as /class/input/input4 kernel: ACPI: Power Button (FF) [PWRF] kernel: input: Power Button (CM) as /class/input/input5 I'll try if I can make some serial test nevertheless from the console. Regards, ~ Antonio [-- Attachment #2: boot.log.gz --] [-- Type: application/x-gzip, Size: 4046 bytes --] ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 16:56 ` Antonino Ingargiola @ 2007-05-04 18:02 ` Paul Fulghum 2007-05-04 17:13 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 18:02 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel Antonino Ingargiola wrote: > The system blocks during booting. I can unblock it with SysReq+K but > then I'm unable to log into X. Hmmm, it tests here with no problem. Does reversing the patch and rebuilding the kernel fix the boot? -- Paul Fulghum Microgate Systems, Ltd. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 18:02 ` Paul Fulghum @ 2007-05-04 17:13 ` Antonino Ingargiola 2007-05-04 17:20 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 17:13 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > Antonino Ingargiola wrote: > > The system blocks during booting. I can unblock it with SysReq+K but > > then I'm unable to log into X. > > Hmmm, it tests here with no problem. > > Does reversing the patch and rebuilding the kernel fix the boot? The kernel to which I applied the patch was vanilla 2.6.21.1, and it is the one I'm currently running (no config changes or other patches). Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 17:13 ` Antonino Ingargiola @ 2007-05-04 17:20 ` Paul Fulghum 2007-05-04 17:25 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 17:20 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel On Fri, 2007-05-04 at 19:13 +0200, Antonino Ingargiola wrote: > On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > > Antonino Ingargiola wrote: > > > The system blocks during booting. I can unblock it with SysReq+K but > > > then I'm unable to log into X. > > > > Hmmm, it tests here with no problem. > > > > Does reversing the patch and rebuilding the kernel fix the boot? > > The kernel to which I applied the patch was vanilla 2.6.21.1, and it > is the one I'm currently running (no config changes or other patches). Are you using a serial port as console? -- Paul Fulghum Microgate Systems, Ltd ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 17:20 ` Paul Fulghum @ 2007-05-04 17:25 ` Antonino Ingargiola 2007-05-04 17:41 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 17:25 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > On Fri, 2007-05-04 at 19:13 +0200, Antonino Ingargiola wrote: > > On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > > > Antonino Ingargiola wrote: > > > > The system blocks during booting. I can unblock it with SysReq+K but > > > > then I'm unable to log into X. > > > > > > Hmmm, it tests here with no problem. > > > > > > Does reversing the patch and rebuilding the kernel fix the boot? > > > > The kernel to which I applied the patch was vanilla 2.6.21.1, and it > > is the one I'm currently running (no config changes or other patches). > > Are you using a serial port as console? > No. Ehmm ... I've an usb keybord and vga monitor on a standard desktop pc. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 17:25 ` Antonino Ingargiola @ 2007-05-04 17:41 ` Paul Fulghum 2007-05-04 18:46 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 17:41 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel On Fri, 2007-05-04 at 19:25 +0200, Antonino Ingargiola wrote: > No. Ehmm ... I've an usb keybord and vga monitor on a standard desktop pc. OK, I'm stumped. I don't see how my patch could cause the machine to not boot and I'm not seeing that behavior here. -- Paul Fulghum Microgate Systems, Ltd ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 17:41 ` Paul Fulghum @ 2007-05-04 18:46 ` Antonino Ingargiola 2007-05-04 19:06 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 18:46 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > On Fri, 2007-05-04 at 19:25 +0200, Antonino Ingargiola wrote: > > > No. Ehmm ... I've an usb keybord and vga monitor on a standard desktop pc. > > OK, I'm stumped. > > I don't see how my patch could cause the machine to not boot > and I'm not seeing that behavior here. I can boot it hitting SysReq+K, but only in text mode. X start but I can't do login (the mouse moves but I cant enter username and password). Furthermore if I hit some key in GDM I can't switch to text console anymore. If I switch to text-mode after boot all seems to work. Maybe this is related to some important process I kill with the SysReq key. I'm quite confident the system blocks on "Setting consoles fonts and modes.", and thus during the boot script console-screen.h. I'll try to see which commands blocks... BTW, I've tried the serial port in text mode. With the patch, flushing the input results effectively in a complete flush. However after doing the flush I can't read any char anymore without closing and reopening the port. I've verified this behavior both communicating between two serial port and both communicating with an usb-serial device (driver cdc-acm). Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 18:46 ` Antonino Ingargiola @ 2007-05-04 19:06 ` Antonino Ingargiola 2007-05-04 19:49 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 19:06 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/4/07, Antonino Ingargiola <tritemio@gmail.com> wrote: [cut] > I'm quite confident the system blocks on "Setting consoles fonts and > modes.", and thus during the boot script console-screen.h. I'll try to > see which commands blocks... Filling with echo console-screen.sh I've found that the blocking command is: unicode_start 2> /dev/null || true or at least the echo before this command is the last shown. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 19:06 ` Antonino Ingargiola @ 2007-05-04 19:49 ` Paul Fulghum 2007-05-04 21:21 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 19:49 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel On Fri, 2007-05-04 at 21:06 +0200, Antonino Ingargiola wrote: > Filling with echo console-screen.sh I've found that the blocking command is: > > unicode_start 2> /dev/null || true > > or at least the echo before this command is the last shown. I still don't know what is blocking. It is possible some tty device is operating with an improperly initialized tty structure. I vaguely remember some console code creating its own minimally initialized 'dummy' tty structure. This might be causing the new flush code to hang. Try this patch which does not call the flush unless a line discipline is attached to the tty. That should indicate a normally initialized tty structure. --- a/drivers/char/tty_io.c 2007-04-25 22:08:32.000000000 -0500 +++ b/drivers/char/tty_io.c 2007-05-04 12:15:18.000000000 -0500 @@ -365,6 +365,28 @@ static void tty_buffer_free(struct tty_s } /** + * tty_buffer_flush - flush full tty buffers + * @tty: tty to flush + * + * flush all the buffers containing receive data + * + * Locking: none + */ + +static void tty_buffer_flush(struct tty_struct *tty) +{ + struct tty_buffer *thead; + unsigned long flags; + + spin_lock_irqsave(&tty->buf.lock, flags); + while((thead = tty->buf.head) != NULL) { + tty->buf.head = thead->next; + tty_buffer_free(tty, thead); + } + spin_unlock_irqrestore(&tty->buf.lock, flags); +} + +/** * tty_buffer_find - find a free tty buffer * @tty: tty owning the buffer * @size: characters wanted @@ -1236,8 +1258,10 @@ void tty_ldisc_flush(struct tty_struct * { struct tty_ldisc *ld = tty_ldisc_ref(tty); if(ld) { - if(ld->flush_buffer) + if(ld->flush_buffer) { ld->flush_buffer(tty); + tty_buffer_flush(tty); + } tty_ldisc_deref(ld); } } @@ -3336,6 +3360,20 @@ int tty_ioctl(struct inode * inode, stru case TIOCMBIC: case TIOCMBIS: return tty_tiocmset(tty, file, cmd, p); + case TCFLSH: + switch (arg) { + case TCIFLUSH: + case TCIOFLUSH: + /* flush tty buffer and allow ldisc to process ioctl */ + ld = tty_ldisc_ref_wait(tty); + if (ld) { + if (ld->ioctl) + tty_buffer_flush(tty); + tty_ldisc_deref(ld); + } + break; + } + break; } if (tty->driver->ioctl) { retval = (tty->driver->ioctl)(tty, file, cmd, arg); ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 19:49 ` Paul Fulghum @ 2007-05-04 21:21 ` Antonino Ingargiola 2007-05-04 10:57 ` Paul Fulghum 2007-05-04 23:30 ` Paul Fulghum 0 siblings, 2 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-04 21:21 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > On Fri, 2007-05-04 at 21:06 +0200, Antonino Ingargiola wrote: > > > Filling with echo console-screen.sh I've found that the blocking command is: > > > > unicode_start 2> /dev/null || true > > > > or at least the echo before this command is the last shown. > > I still don't know what is blocking. > > It is possible some tty device is operating with an improperly > initialized tty structure. I vaguely remember some console code > creating its own minimally initialized 'dummy' tty structure. > > This might be causing the new flush code to hang. > > Try this patch which does not call the flush unless a line > discipline is attached to the tty. That should indicate > a normally initialized tty structure. > Tried. Nothing changes with this patch. I'm booting the patched kernel commenting out the unicode_start line for now, and there aren't other "system" problems. I confirm the behavior previously posted for the serial devices on flush with this patch too. "With the patch, flushing the input results effectively in a complete flush. However after doing the flush I can't read [further] chars [sent to the serial port] without closing and reopening the port. I've verified this behavior both communicating between two serial ports and both communicating with an usb-serial device (driver cdc-acm)." Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 21:21 ` Antonino Ingargiola @ 2007-05-04 10:57 ` Paul Fulghum 2007-05-05 9:53 ` Antonino Ingargiola 2007-05-04 23:30 ` Paul Fulghum 1 sibling, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 10:57 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel Antonino: Can you try two tests (with my patch applied): 1. comment out the tty_flush_buffer() call in tty_ldisc_flush() and test 2. uncomment (reenable) the above call and comment out the tty_flush_buffer() call in tty_ioctl() and test Thanks, Paul ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 10:57 ` Paul Fulghum @ 2007-05-05 9:53 ` Antonino Ingargiola 2007-05-05 9:56 ` Antonino Ingargiola 2007-05-05 10:19 ` Antonino Ingargiola 0 siblings, 2 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 9:53 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > Antonino: > > Can you try two tests (with my patch applied): > > 1. comment out the tty_flush_buffer() call in tty_ldisc_flush() and test > > 2. uncomment (reenable) the above call and comment out the > tty_flush_buffer() call in tty_ioctl() and test I assume you meant tty_buffer_flush(). I've built kernel 1). In kernel 2), do you mean: /*if (ld->ioctl) tty_buffer_flush(tty);*/ tty_ldisc_deref(ld); right? This is what I'm building... I'll report these new tests soon. While waiting for kernel building I'll document the testing procedure. In this way someone else can easily try to reproduce the problem. 1. Hardware. Two serial ports required. Connect the two port witth a null-modem cable, or patch, for each port the Tx pin with the Rx of the other port[0]. 2. Software I assume python is installed. Install also pyserial[1] (in debian python-serial), if you manually download the package you can put the "serial" dir in the dir you use to perform the test (no need to install system-wide). If you can, install also the ipython shell that has colored output and auto-completition. 3. Test >From the python shell: import serial s0 = serial.Serial(0, timeout=1) open the /dev/ttyS0 port with default values, hit 's0' [enter] to see the serial parameters. s1 = serial.Serial(1, timeout=1) with the previous comma we open /dev/ttyS1 with the same serial port settings. To write to one serial port: s0.write('test\n') and to read use the .read() or .readline() method: s1.readline() The .inWaiting() methods gives the numbers of bytes in the input buffer. The .flushInput() method flushes the input buffer: In [6]: s0.write('test\n') In [7]: s1.inWaiting() Out[7]: 5L In [8]: s1.readline() Out[8]: 'test\n' In [9]: s1.inWaiting() Out[9]: 0L If all works, now fill one serial port with a bunch of data (an increasing 8-digit number): for i in xrange(10000): s0.write(str(i).zfill(8)+'\n') we can see that the s1 input buffer is full: s1.inWaiting() Out[21]: 4095L then empty the buffer and see what happens: In [22]: s1.flushInput() In [23]: s1.inWaiting() Out[23]: 4095L the buffer is still full. You have to flush the buffer more then once to completely flush all the buffer chain (including the flip buffer). With the patched kernel at this point I get correctly: In [22]: s1.flushInput() In [23]: s1.inWaiting() Out[23]: 0L but then I can't read any other byte from the serial without closing and reopening it: In [24]: s0.write('test\n') In [25]: s1.inWaiting() Out[25]: 0L In [26]: s1.read() Out[26]: '' In [27]: s1.close() In [28]: s1.open() In [29]: s1.inWaiting() Out[29]: 0L In [30]: s0.write('test\n') In [31]: s1.inWaiting() Out[31]: 5L In [32]: s1.readline() Out[32]: 'test\n' Hope the explanation is clear If someone else want to try... Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 9:53 ` Antonino Ingargiola @ 2007-05-05 9:56 ` Antonino Ingargiola 2007-05-05 10:19 ` Antonino Ingargiola 1 sibling, 0 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 9:56 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel Forgot to include the links in the previous mail: [0] http://www.lammertbies.nl/comm/info/RS-232_null_modem.html [1] http://pyserial.sourceforge.net/ ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 9:53 ` Antonino Ingargiola 2007-05-05 9:56 ` Antonino Ingargiola @ 2007-05-05 10:19 ` Antonino Ingargiola 1 sibling, 0 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 10:19 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel On 5/5/07, Antonino Ingargiola <tritemio@gmail.com> wrote: > On 5/4/07, Paul Fulghum <paulkf@microgate.com> wrote: > > Antonino: > > > > Can you try two tests (with my patch applied): > > > > 1. comment out the tty_flush_buffer() call in tty_ldisc_flush() and test > > > > 2. uncomment (reenable) the above call and comment out the > > tty_flush_buffer() call in tty_ioctl() and test > > I assume you meant tty_buffer_flush(). I've built kernel 1). In kernel > 2), do you mean: > > /*if (ld->ioctl) > tty_buffer_flush(tty);*/ > tty_ldisc_deref(ld); > > right? This is what I'm building... I'll report these new tests soon. Ok test done. With kernel 1. the behavior is the same as with your plain second patch only (flush input works but I cannot read anymore from the serial that was flushed without closing and reopening the port). See previous mail for the details of the test. With kernel 2 the behavior is the same as mainline (multiple flushes are needed to completely empty the buffers). And I _can_ read further chars from the serial line after the flush. Here it is the ipython session that document the test with kernel 2: In [1]: import serial In [2]: s0 = serial.Serial(0, timeout=1) In [3]: s1 = serial.Serial(1, timeout=1) In [4]: s0.write('test\n') In [5]: s1.inWaiting() Out[5]: 5L In [6]: s1.readline() Out[6]: 'test\n' In [7]: for i in xrange(1000): ...: s0.write(str(i).zfill(8)+'\n') ...: In [8]: s1.inWaiting() Out[8]: 4095L In [9]: s1.flushInput() In [10]: s1.inWaiting() Out[10]: 4095L # NOTE the buffer is still full! In [11]: s1.flushInput() In [12]: s1.inWaiting() Out[12]: 810L # The buffer beginning to be drained In [13]: s1.flushInput() In [14]: s1.inWaiting() Out[14]: 0L # Now the buffer is empty In [15]: s0.write('test\n') # An reading further chars works In [16]: s1.inWaiting() Out[16]: 5L In [17]: s1.readline() Out[17]: 'test\n' Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 21:21 ` Antonino Ingargiola 2007-05-04 10:57 ` Paul Fulghum @ 2007-05-04 23:30 ` Paul Fulghum 2007-05-05 8:26 ` Paul Fulghum 1 sibling, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-04 23:30 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel Antonino Ingargiola wrote: > "With the patch, flushing the input results effectively in a complete flush. > However after doing the flush I can't read [further] chars [sent to > the serial port] > without closing and reopening the port. I've verified this behavior both > communicating between two serial ports and both communicating with an > usb-serial device (driver cdc-acm)." OK, this behavior is so unexpected I must be missing something basic. Not being able to reproduce this myself is a problem. If I think of something I'll post. -- Paul ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-04 23:30 ` Paul Fulghum @ 2007-05-05 8:26 ` Paul Fulghum 2007-05-05 15:11 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-05 8:26 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel On Fri, 2007-05-04 at 17:30 -0600, Paul Fulghum wrote: > OK, this behavior is so unexpected I must be missing > something basic. And so I was. Try this patch. --- a/drivers/char/tty_io.c 2007-05-04 05:46:55.000000000 -0500 +++ b/drivers/char/tty_io.c 2007-05-05 03:23:46.000000000 -0500 @@ -365,6 +365,29 @@ static void tty_buffer_free(struct tty_s } /** + * tty_buffer_flush - flush full tty buffers + * @tty: tty to flush + * + * flush all the buffers containing receive data + * + * Locking: none + */ + +static void tty_buffer_flush(struct tty_struct *tty) +{ + struct tty_buffer *thead; + unsigned long flags; + + spin_lock_irqsave(&tty->buf.lock, flags); + while((thead = tty->buf.head) != NULL) { + tty->buf.head = thead->next; + tty_buffer_free(tty, thead); + } + tty->buf.tail = NULL; + spin_unlock_irqrestore(&tty->buf.lock, flags); +} + +/** * tty_buffer_find - find a free tty buffer * @tty: tty owning the buffer * @size: characters wanted @@ -1240,6 +1263,7 @@ void tty_ldisc_flush(struct tty_struct * ld->flush_buffer(tty); tty_ldisc_deref(ld); } + tty_buffer_flush(tty); } EXPORT_SYMBOL_GPL(tty_ldisc_flush); @@ -3336,6 +3360,15 @@ int tty_ioctl(struct inode * inode, stru case TIOCMBIC: case TIOCMBIS: return tty_tiocmset(tty, file, cmd, p); + case TCFLSH: + switch (arg) { + case TCIFLUSH: + case TCIOFLUSH: + /* flush tty buffer and allow ldisc to process ioctl */ + tty_buffer_flush(tty); + break; + } + break; } if (tty->driver->ioctl) { retval = (tty->driver->ioctl)(tty, file, cmd, arg); ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 8:26 ` Paul Fulghum @ 2007-05-05 15:11 ` Antonino Ingargiola 2007-05-05 16:43 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 15:11 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel 2007/5/5, Paul Fulghum <paulkf@microgate.com>: > On Fri, 2007-05-04 at 17:30 -0600, Paul Fulghum wrote: > > OK, this behavior is so unexpected I must be missing > > something basic. > > And so I was. Try this patch. > > --- a/drivers/char/tty_io.c 2007-05-04 05:46:55.000000000 -0500 > +++ b/drivers/char/tty_io.c 2007-05-05 03:23:46.000000000 -0500 Great! Really good job, Paul. The patch now boot properly and solves completely the testcase with two serial lines: In [1]: import serial In [2]: s0 = serial.Serial(0, timeout=1) In [3]: s1 = serial.Serial(1, timeout=1) In [4]: s0.write('test\n') In [5]: s1.inWaiting() Out[5]: 5L In [6]: s1.readline() Out[6]: 'test\n' In [7]: for i in xrange(1000): ...: s0.write(str(i).zfill(8)+'\n') ...: In [8]: s1.inWaiting() Out[8]: 4095L In [9]: s1.flushInput() In [10]: s1.inWaiting() Out[10]: 0L In [11]: s0.write('test\n') In [12]: s1.inWaiting() Out[12]: 5L In [13]: s1.readline() Out[13]: 'test\n' I've done more tests with other scripts and all works perfectly (the input buffer is really totally flushed the first time). Many thanks! I think this patch should be included in mainline, since if one flushes the input buffer, really want to flush the entire buffer chain and doesn't want to read any old data _after_ a flush. However I also tested a usb-serial device (that uses the cdc-acm driver) and in this case I still need _two_ flushInput() to totally flush the input buffer. There can be another *secondary buffer* in the usb-serial driver? Can this buffer be emptied out too? I bet the same behavior can be reproduced with another FTDI-based usb-serial device that I haven't at hand now (but that I can test the next week). Many thanks for the help so far. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 15:11 ` Antonino Ingargiola @ 2007-05-05 16:43 ` Paul Fulghum 2007-05-05 16:08 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-05 16:43 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel Antonino Ingargiola wrote: > The patch now boot properly and solves > completely the testcase with two serial lines: Good, thanks for testing. > I think this patch should be included in mainline, since if one flushes > the input buffer, really want to flush the entire buffer chain and > doesn't want to read any old data _after_ a flush. I will submit the patch, it's clearly needed. > However I also tested a usb-serial device (that uses the cdc-acm > driver) and in this case I still need _two_ flushInput() to totally > flush the input buffer. > > There can be another *secondary buffer* in the usb-serial driver? Can > this buffer be emptied out too? Very possible, but I'm not familiar with that. There is not an input flush method for the tty driver and individual drivers don't process that ioctl. The tty drivers I've seen immediately pass receive data to the tty buffering and I'm not sure why a driver would behave otherwise. -- Paul ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:43 ` Paul Fulghum @ 2007-05-05 16:08 ` Paul Fulghum 2007-05-05 16:15 ` Paul Fulghum ` (2 more replies) 0 siblings, 3 replies; 59+ messages in thread From: Paul Fulghum @ 2007-05-05 16:08 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel On Sat, 2007-05-05 at 10:43 -0600, Paul Fulghum wrote: > There is not an input flush method for the tty driver > and individual drivers don't process that ioctl. > The tty drivers I've seen immediately pass receive data to the > tty buffering and I'm not sure why a driver would > behave otherwise. cdc-acm does its own buffering. In your case, the line discipline throttled the tty device because the ldisc buffer was full. If the line discipline throttles the driver input, the cdc-acm driver stops giving data to the tty buffering and instead stores them internally. In the serial driver this usually just results in dropping RTS to signal the remote end to stop sending. The serial driver always immediately gives receive data to the tty buffering without regard to the throttled state. I would argue that cdc-acm should do the same as the serial driver. -- Paul ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:08 ` Paul Fulghum @ 2007-05-05 16:15 ` Paul Fulghum 2007-05-05 16:26 ` Antonino Ingargiola 2007-05-05 16:36 ` Alan Cox 2007-05-05 16:46 ` Oliver Neukum 2 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-05 16:15 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel On Sat, 2007-05-05 at 11:08 -0500, Paul Fulghum wrote: > I would argue that cdc-acm should do the same as the serial driver. Try this patch for the usb ports. (I don't have that hardware) --- a/drivers/usb/class/cdc-acm.c 2007-04-25 22:08:32.000000000 -0500 +++ b/drivers/usb/class/cdc-acm.c 2007-05-05 11:12:10.000000000 -0500 @@ -355,18 +355,9 @@ next_buffer: spin_lock_irqsave(&acm->throttle_lock, flags); throttled = acm->throttle; spin_unlock_irqrestore(&acm->throttle_lock, flags); - if (!throttled) - tty_insert_flip_string(tty, buf->base, buf->size); + tty_insert_flip_string(tty, buf->base, buf->size); tty_flip_buffer_push(tty); - if (throttled) { - dbg("Throttling noticed"); - spin_lock_irqsave(&acm->read_lock, flags); - list_add(&buf->list, &acm->filled_read_bufs); - spin_unlock_irqrestore(&acm->read_lock, flags); - return; - } - spin_lock_irqsave(&acm->read_lock, flags); list_add(&buf->list, &acm->spare_read_bufs); spin_unlock_irqrestore(&acm->read_lock, flags); ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:15 ` Paul Fulghum @ 2007-05-05 16:26 ` Antonino Ingargiola 2007-05-05 16:58 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 16:26 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel 2007/5/5, Paul Fulghum <paulkf@microgate.com>: > On Sat, 2007-05-05 at 11:08 -0500, Paul Fulghum wrote: > > I would argue that cdc-acm should do the same as the serial driver. > > Try this patch for the usb ports. (I don't have that hardware) Building... thanks. The HW is a cypress demo-board for their micro-controllers with an USB interface. Linux had recognized it as a cdc_acm modem, but it's only a very simple serial device that can stream data on request. ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:26 ` Antonino Ingargiola @ 2007-05-05 16:58 ` Antonino Ingargiola 2007-05-05 17:04 ` Paul Fulghum 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 16:58 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel 2007/5/5, Antonino Ingargiola <tritemio@gmail.com>: > 2007/5/5, Paul Fulghum <paulkf@microgate.com>: > > On Sat, 2007-05-05 at 11:08 -0500, Paul Fulghum wrote: > > > I would argue that cdc-acm should do the same as the serial driver. > > > > Try this patch for the usb ports. (I don't have that hardware) > > Building... thanks. > This patch does not solve the problem with the cdc_acd driver. I still need to flush two times to really flush the input. And the "secondary buffer" still seems 26 bytes (as before). Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:58 ` Antonino Ingargiola @ 2007-05-05 17:04 ` Paul Fulghum 2007-05-05 18:08 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-05 17:04 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Alan Cox, linux-usb-users, linux-kernel On Sat, 2007-05-05 at 18:58 +0200, Antonino Ingargiola wrote: > This patch does not solve the problem with the cdc_acd driver. I still > need to flush two times to really flush the input. And the "secondary > buffer" still seems 26 bytes (as before). I missed a bit, try this. --- a/drivers/usb/class/cdc-acm.c 2007-04-25 22:08:32.000000000 -0500 +++ b/drivers/usb/class/cdc-acm.c 2007-05-05 12:03:19.000000000 -0500 @@ -335,8 +335,6 @@ static void acm_rx_tasklet(unsigned long spin_lock_irqsave(&acm->throttle_lock, flags); throttled = acm->throttle; spin_unlock_irqrestore(&acm->throttle_lock, flags); - if (throttled) - return; next_buffer: spin_lock_irqsave(&acm->read_lock, flags); @@ -355,18 +353,9 @@ next_buffer: spin_lock_irqsave(&acm->throttle_lock, flags); throttled = acm->throttle; spin_unlock_irqrestore(&acm->throttle_lock, flags); - if (!throttled) - tty_insert_flip_string(tty, buf->base, buf->size); + tty_insert_flip_string(tty, buf->base, buf->size); tty_flip_buffer_push(tty); - if (throttled) { - dbg("Throttling noticed"); - spin_lock_irqsave(&acm->read_lock, flags); - list_add(&buf->list, &acm->filled_read_bufs); - spin_unlock_irqrestore(&acm->read_lock, flags); - return; - } - spin_lock_irqsave(&acm->read_lock, flags); list_add(&buf->list, &acm->spare_read_bufs); spin_unlock_irqrestore(&acm->read_lock, flags); ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 17:04 ` Paul Fulghum @ 2007-05-05 18:08 ` Antonino Ingargiola 2007-05-05 18:35 ` Oliver Neukum 0 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 18:08 UTC (permalink / raw) To: Paul Fulghum; +Cc: Alan Cox, linux-usb-users, linux-kernel, Oliver Neukum 2007/5/5, Paul Fulghum <paulkf@microgate.com>: > On Sat, 2007-05-05 at 18:58 +0200, Antonino Ingargiola wrote: > > This patch does not solve the problem with the cdc_acd driver. I still > > need to flush two times to really flush the input. And the "secondary > > buffer" still seems 26 bytes (as before). > > I missed a bit, try this. > Tried and this one work right. A single flush is sufficient to completely flush the input buffer. Again, thanks a lot :). 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. However, if I understood well seems that many drives have to be checked against this problem. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 18:08 ` Antonino Ingargiola @ 2007-05-05 18:35 ` Oliver Neukum 2007-05-06 7:06 ` Antonino Ingargiola ` (3 more replies) 0 siblings, 4 replies; 59+ messages in thread From: Oliver Neukum @ 2007-05-05 18:35 UTC (permalink / raw) To: Antonino Ingargiola; +Cc: Paul Fulghum, Alan Cox, linux-usb-users, linux-kernel 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; ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 18:35 ` Oliver Neukum @ 2007-05-06 7:06 ` Antonino Ingargiola 2007-05-09 9:53 ` Antonino Ingargiola 2007-05-09 10:42 ` Gene Heskett ` (2 subsequent siblings) 3 siblings, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-06 7:06 UTC (permalink / raw) To: Oliver Neukum; +Cc: Paul Fulghum, Alan Cox, linux-usb-users, linux-kernel 2007/5/5, Oliver Neukum <oliver@neukum.org>: > 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? > Thanks for the patch! Alas, I will have access to an FTDI device only on Tuesday, then I'll test it and report results. > Regards > Oliver Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 7:06 ` Antonino Ingargiola @ 2007-05-09 9:53 ` Antonino Ingargiola 0 siblings, 0 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-09 9:53 UTC (permalink / raw) To: Oliver Neukum; +Cc: Paul Fulghum, Alan Cox, linux-usb-users, linux-kernel 2007/5/6, Antonino Ingargiola <tritemio@gmail.com>: > 2007/5/5, Oliver Neukum <oliver@neukum.org>: > > 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? > > > > Thanks for the patch! Alas, I will have access to an FTDI device only > on Tuesday, then I'll test it and report results. Sorry. I've not been able to try this ftdi patch yet. My work pc has ubuntu dapper with 2.6.15 kernel. I've compiled 2.6.21 there but the leap is too much and there are probably udev incompatibilities so the /dev entry is not created for any USB device. I need to install a newer distro to work with mainline. This mail is just to point out that the patch is not forgotten, just need more time to try it. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 18:35 ` Oliver Neukum 2007-05-06 7:06 ` Antonino Ingargiola @ 2007-05-09 10:42 ` Gene Heskett 2007-05-09 11:02 ` Gene Heskett 2007-05-09 12:00 ` Gene Heskett 3 siblings, 0 replies; 59+ messages in thread From: Gene Heskett @ 2007-05-09 10:42 UTC (permalink / raw) To: Oliver Neukum Cc: Antonino Ingargiola, Paul Fulghum, Alan Cox, linux-usb-users, linux-kernel 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!! ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 18:35 ` Oliver Neukum 2007-05-06 7:06 ` Antonino Ingargiola 2007-05-09 10:42 ` Gene Heskett @ 2007-05-09 11:02 ` Gene Heskett 2007-05-09 12:00 ` Gene Heskett 3 siblings, 0 replies; 59+ messages in thread From: Gene Heskett @ 2007-05-09 11:02 UTC (permalink / raw) To: Oliver Neukum Cc: Antonino Ingargiola, Paul Fulghum, Alan Cox, linux-usb-users, linux-kernel 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: While running kernel-2.6.21.1-sd-0.48 + this and the other patch I mentioned, Unforch, this patch doesn't seem to have effected my usb-serial problems, for upsd anyway, it's running at 47% of the cpu right now, while running sd-0.48. Occasionally a stop and restart will fix it... Nope. On the restart, its about 3% _until_ something starts reading its output data file, which could be gkrellmBUPS, or its own gui, either one bounces it back up to 45+% of the cpu. On a kernel where it works sorta right, as in a recent fedora kernel, its about 1.5%, and on even older 2.6.18ish stuff, this utility ran at .1% of the cpu regardless of who read its output data. But that was with a pl2303 adapter, which no longer works at all so I bought some ftdi based ones. So the next boot will be to cfs-v10 + these. >To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >the body of a message to majordomo@vger.kernel.org >More majordomo info at http://vger.kernel.org/majordomo-info.html >Please read the FAQ at http://www.tux.org/lkml/ -- 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) For certain people, after fifty, litigation takes the place of sex. -- Gore Vidal ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 18:35 ` Oliver Neukum ` (2 preceding siblings ...) 2007-05-09 11:02 ` Gene Heskett @ 2007-05-09 12:00 ` Gene Heskett 3 siblings, 0 replies; 59+ messages in thread From: Gene Heskett @ 2007-05-09 12:00 UTC (permalink / raw) To: Oliver Neukum, David Miller Cc: Antonino Ingargiola, Paul Fulghum, Alan Cox, linux-usb-users, linux-kernel On Saturday 05 May 2007, Oliver Neukum wrote: You are included this time David because 3 messages I posted this morning, whose text should resemble this one, the first of those 3, were also /dev/nulled. this is BS when I can't even discuss a patch in the same manner as others can. So whats wrong with this message that its filtered? >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!! ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:08 ` Paul Fulghum 2007-05-05 16:15 ` Paul Fulghum @ 2007-05-05 16:36 ` Alan Cox 2007-05-05 16:54 ` Oliver Neukum 2007-05-05 18:07 ` Oliver Neukum 2007-05-05 16:46 ` Oliver Neukum 2 siblings, 2 replies; 59+ messages in thread From: Alan Cox @ 2007-05-05 16:36 UTC (permalink / raw) To: Paul Fulghum; +Cc: Antonino Ingargiola, linux-usb-users, linux-kernel > In the serial driver this usually just results in dropping > RTS to signal the remote end to stop sending. The serial > driver always immediately gives receive data to the tty buffering > without regard to the throttled state. > > I would argue that cdc-acm should do the same as the serial driver. This is a bug in cdc-acm really. It should not double buffer, but to be fair to the authors prior to the new tty buffering it *had* to do this. Alan ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:36 ` Alan Cox @ 2007-05-05 16:54 ` Oliver Neukum 2007-05-05 21:49 ` Alan Cox 2007-05-05 18:07 ` Oliver Neukum 1 sibling, 1 reply; 59+ messages in thread From: Oliver Neukum @ 2007-05-05 16:54 UTC (permalink / raw) To: Alan Cox; +Cc: Paul Fulghum, Antonino Ingargiola, linux-usb-users, linux-kernel Am Samstag, 5. Mai 2007 18:36 schrieb Alan Cox: > > In the serial driver this usually just results in dropping > > RTS to signal the remote end to stop sending. The serial > > driver always immediately gives receive data to the tty buffering > > without regard to the throttled state. > > > > I would argue that cdc-acm should do the same as the serial driver. > > This is a bug in cdc-acm really. It should not double buffer, but to be > fair to the authors prior to the new tty buffering it *had* to do this. I assume this applies to all serial drivers in the wider sense? Regards Oliver ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:54 ` Oliver Neukum @ 2007-05-05 21:49 ` Alan Cox 0 siblings, 0 replies; 59+ messages in thread From: Alan Cox @ 2007-05-05 21:49 UTC (permalink / raw) To: Oliver Neukum Cc: Paul Fulghum, Antonino Ingargiola, linux-usb-users, linux-kernel > > This is a bug in cdc-acm really. It should not double buffer, but to be > > fair to the authors prior to the new tty buffering it *had* to do this. > > I assume this applies to all serial drivers in the wider sense? When possible at least. Obviously there will always be some buffering in the hardware or interface glue but you should never need to work around the tty buffers now. Alan ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:36 ` Alan Cox 2007-05-05 16:54 ` Oliver Neukum @ 2007-05-05 18:07 ` Oliver Neukum 2007-05-05 21:52 ` Alan Cox 1 sibling, 1 reply; 59+ messages in thread From: Oliver Neukum @ 2007-05-05 18:07 UTC (permalink / raw) To: Alan Cox; +Cc: Paul Fulghum, Antonino Ingargiola, linux-usb-users, linux-kernel Am Samstag, 5. Mai 2007 18:36 schrieb Alan Cox: > > In the serial driver this usually just results in dropping > > RTS to signal the remote end to stop sending. The serial > > driver always immediately gives receive data to the tty buffering > > without regard to the throttled state. > > > > I would argue that cdc-acm should do the same as the serial driver. > > This is a bug in cdc-acm really. It should not double buffer, but to be > fair to the authors prior to the new tty buffering it *had* to do this. Hi, should I understand this so that, if tty_buffer_request_room() returns less than requested, the rest of the data should be dropped on the floor? Regards Oliver ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 18:07 ` Oliver Neukum @ 2007-05-05 21:52 ` Alan Cox 2007-05-06 7:29 ` Antonino Ingargiola 2007-05-06 14:49 ` Paul Fulghum 0 siblings, 2 replies; 59+ messages in thread From: Alan Cox @ 2007-05-05 21:52 UTC (permalink / raw) To: Oliver Neukum Cc: Paul Fulghum, Antonino Ingargiola, linux-usb-users, linux-kernel On Sat, 5 May 2007 20:07:15 +0200 Oliver Neukum <oliver@neukum.org> wrote: > Am Samstag, 5. Mai 2007 18:36 schrieb Alan Cox: > > > In the serial driver this usually just results in dropping > > > RTS to signal the remote end to stop sending. The serial > > > driver always immediately gives receive data to the tty buffering > > > without regard to the throttled state. > > > > > > I would argue that cdc-acm should do the same as the serial driver. > > > > This is a bug in cdc-acm really. It should not double buffer, but to be > > fair to the authors prior to the new tty buffering it *had* to do this. > > Hi, > > should I understand this so that, if tty_buffer_request_room() returns > less than requested, the rest of the data should be dropped on the > floor? If it returns NULL then either there is > 64K buffered (we can adjust that if anyone shows need - its just for sanity) or the system is out of RAM. Alan ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 21:52 ` Alan Cox @ 2007-05-06 7:29 ` Antonino Ingargiola 2007-05-06 12:28 ` Alan Cox 2007-05-06 14:35 ` Paul Fulghum 2007-05-06 14:49 ` Paul Fulghum 1 sibling, 2 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-06 7:29 UTC (permalink / raw) To: Alan Cox; +Cc: Oliver Neukum, Paul Fulghum, linux-usb-users, linux-kernel 2007/5/5, Alan Cox <alan@lxorguk.ukuu.org.uk>: > On Sat, 5 May 2007 20:07:15 +0200 > Oliver Neukum <oliver@neukum.org> wrote: [cut] > > should I understand this so that, if tty_buffer_request_room() returns > > less than requested, the rest of the data should be dropped on the > > floor? > > If it returns NULL then either there is > 64K buffered (we can adjust > that if anyone shows need - its just for sanity) or the system is out of > RAM. For my use case would be more sensible to accept the new data and discard the older one in the tty buffer: the tty buffer would be a moving window of the most recent incoming data. This because if someone does not read the incoming data maybe he's not interested in it. When he finally reads the data (assuming there was buffer underrun) he's likely interested to the more recent chunk of incoming data and not to an "head" of the data firstly received. Since I acquire measurement data from serial this make perfect sense for me. But does this make sense in general too? However, whatever policy the buffer uses, the fundamental point it's that when I flush the input buffer I should be sure that each byte read after the flush is *new* (current) data and not old one. This because when the input stream can be stopped I can check that there are 0 byte in the buffer, but when the stream can't be stopped I must use a flush-and-sleep (multiple times) heuristic before I can read a single *reliable* byte. > Alan > Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 7:29 ` Antonino Ingargiola @ 2007-05-06 12:28 ` Alan Cox 2007-05-06 16:39 ` Antonino Ingargiola 2007-05-06 21:51 ` [Linux-usb-users] " Alan Stern 2007-05-06 14:35 ` Paul Fulghum 1 sibling, 2 replies; 59+ messages in thread From: Alan Cox @ 2007-05-06 12:28 UTC (permalink / raw) To: Antonino Ingargiola Cc: Oliver Neukum, Paul Fulghum, linux-usb-users, linux-kernel > However, whatever policy the buffer uses, the fundamental point it's that > when I flush the input buffer I should be sure that each byte read > after the flush is *new* (current) data and not old one. This because Define "new" and "old" in this case. I don't believe you can give a precise definition or that such a thing is physically possible. > when the input stream can be stopped I can check that there are 0 byte > in the buffer, but when the stream can't be stopped I must use a > flush-and-sleep (multiple times) heuristic before I can read a single > *reliable* byte. The hardware itself has buffers at both ends of the link, there may be buffers in modems, muxes and the like as well. We can certainly flush input buffers in the kernel but it isn't clear we can always do so at the hardware level, let alone at the remote end or buffers on devices on the link. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 12:28 ` Alan Cox @ 2007-05-06 16:39 ` Antonino Ingargiola 2007-05-06 16:46 ` Alan Cox 2007-05-06 21:51 ` [Linux-usb-users] " Alan Stern 1 sibling, 1 reply; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-06 16:39 UTC (permalink / raw) To: Alan Cox; +Cc: Oliver Neukum, Paul Fulghum, linux-usb-users, linux-kernel 2007/5/6, Alan Cox <alan@lxorguk.ukuu.org.uk>: > > However, whatever policy the buffer uses, the fundamental point it's that > > when I flush the input buffer I should be sure that each byte read > > after the flush is *new* (current) data and not old one. This because > > Define "new" and "old" in this case. I don't believe you can give a > precise definition or that such a thing is physically possible. > You are right. In the case of buffers storing the *last* N bytes received we always get "new" data. To be precise if we get a byte each T seconds we can read data N*T seconds old (worst case). This is a bound, known, and perfectly acceptable jitter. Let see instead the case a not flushable buffer in the chain (inside the PC) uses the policy of storing the *first* N bytes received. That is the case for the flip buffer in mainline. In this case we can read bytes also one hour old, if we read the first byte one hour after the external device begun to send data. This is an unbound, unknown and thus unacceptable error in a measurement (think if we were acquiring a physical "realtime" sampled quantity). That was exactly my original problem causing data corruption in case of multi-byte data. Paul Fulghum patches fix this problem for serial port and for the cdc-acm driver making the "secondary buffers" flushable. So, in general, all the buffers (in the host) that store the first received N bytes (as policy) should be flushable in order to don't read (potentially very) "old" data after we made a flush. I understand that some internal HW buffer can be not flushable via software, but in this case I doubt the buffer use the store-the-first-N-bytes policy. And even if some particular device does this, than it's *its* fault, not linux. To conclude, the store the *last* N bytes received seems a more reasonable policy for the input buffers managed by the kernel. If the other policy is used (as tty does), then the kernel should flush all the buffers he *can* physically flush, remaining inside the host computer of course. Hope my English is sufficiently clear. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 16:39 ` Antonino Ingargiola @ 2007-05-06 16:46 ` Alan Cox 0 siblings, 0 replies; 59+ messages in thread From: Alan Cox @ 2007-05-06 16:46 UTC (permalink / raw) To: Antonino Ingargiola Cc: Oliver Neukum, Paul Fulghum, linux-usb-users, linux-kernel > To conclude, the store the *last* N bytes received seems a more > reasonable policy for the input buffers managed by the kernel. If the For your use maybe, but it is not the normal behaviour and it is not the behaviour supported by hardware, which generally buffers the first few bytes (and some things like Apple localtalk actually rely upon this) > other policy is used (as tty does), then the kernel should flush all > the buffers he *can* physically flush, remaining inside the host > computer of course. It certainly does no harm to try and do the job as best you can. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [Linux-usb-users] [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 12:28 ` Alan Cox 2007-05-06 16:39 ` Antonino Ingargiola @ 2007-05-06 21:51 ` Alan Stern 2007-05-07 8:07 ` Antonino Ingargiola 1 sibling, 1 reply; 59+ messages in thread From: Alan Stern @ 2007-05-06 21:51 UTC (permalink / raw) To: Alan Cox Cc: Antonino Ingargiola, Paul Fulghum, Oliver Neukum, linux-kernel, linux-usb-users On Sun, 6 May 2007, Alan Cox wrote: > > However, whatever policy the buffer uses, the fundamental point it's that > > when I flush the input buffer I should be sure that each byte read > > after the flush is *new* (current) data and not old one. This because > > Define "new" and "old" in this case. I don't believe you can give a > precise definition or that such a thing is physically possible. One can come close. It would make sense to say that after a flush, subsequent reads should retrieve _contiguous_ bytes from the input stream. In other words, rule out the possibility that the read would get bytes 1-10 (from some buffer somewhere) followed by bytes 30-60 (because bytes 11-29 were dropped by the flush). By contrast, it would be permissible for the read to obtain bytes 20-60, even though 20-29 may have been entered the input stream before the flush occurred. > The hardware itself has buffers at both ends of the link, there may be > buffers in modems, muxes and the like as well. We can certainly flush > input buffers in the kernel but it isn't clear we can always do so at the > hardware level, let alone at the remote end or buffers on devices on the > link. This is of course the fly in the ointment. Alan Stern ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [Linux-usb-users] [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 21:51 ` [Linux-usb-users] " Alan Stern @ 2007-05-07 8:07 ` Antonino Ingargiola 0 siblings, 0 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-07 8:07 UTC (permalink / raw) To: Alan Stern Cc: Alan Cox, Paul Fulghum, Oliver Neukum, linux-kernel, linux-usb-users 2007/5/6, Alan Stern <stern@rowland.harvard.edu>: > On Sun, 6 May 2007, Alan Cox wrote: > > > > However, whatever policy the buffer uses, the fundamental point it's that > > > when I flush the input buffer I should be sure that each byte read > > > after the flush is *new* (current) data and not old one. This because > > > > Define "new" and "old" in this case. I don't believe you can give a > > precise definition or that such a thing is physically possible. > > One can come close. It would make sense to say that after a flush, > subsequent reads should retrieve _contiguous_ bytes from the input stream. > In other words, rule out the possibility that the read would get bytes > 1-10 (from some buffer somewhere) followed by bytes 30-60 (because bytes > 11-29 were dropped by the flush). By contrast, it would be permissible > for the read to obtain bytes 20-60, even though 20-29 may have been > entered the input stream before the flush occurred. > You've expressed in an extremely clear way what I meant. Thanks. Regards, ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 7:29 ` Antonino Ingargiola 2007-05-06 12:28 ` Alan Cox @ 2007-05-06 14:35 ` Paul Fulghum 2007-05-07 9:11 ` [Linux-usb-users] " Diego Zuccato 1 sibling, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-06 14:35 UTC (permalink / raw) To: Antonino Ingargiola Cc: Alan Cox, Oliver Neukum, linux-usb-users, linux-kernel Antonino Ingargiola wrote: > For my use case would be more sensible to accept the new data and > discard the older one in the tty buffer: the tty buffer would be a > moving window of the most recent incoming data. This because if > someone does not read the incoming data maybe he's not interested in > it. When he finally reads the data (assuming there was buffer > underrun) he's likely interested to the more recent chunk of incoming > data and not to an "head" of the data firstly received. Since I > acquire measurement data from serial this make perfect sense for me. > But does this make sense in general too? There is no one policy here that will make everyone happy. Some will want all the data before some was lost, others the data after some was lost. The real goal is to minimize any data loss. > However, whatever policy the buffer uses, the fundamental point it's that > when I flush the input buffer I should be sure that each byte read > after the flush is *new* (current) data and not old one. This because > when the input stream can be stopped I can check that there are 0 byte > in the buffer, but when the stream can't be stopped I must use a > flush-and-sleep (multiple times) heuristic before I can read a single > *reliable* byte. The flush minimizes stale data the application must process. As Alan said in his response there are other sources of stale data beyond the kernel's control. But we absolutely should be flushing all buffers we control. In the end, if more reliability is needed the application must implement its own discipline of framing (defining block boundaries) and checking (CRC) on the raw data stream. -- Paul ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [Linux-usb-users] [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-06 14:35 ` Paul Fulghum @ 2007-05-07 9:11 ` Diego Zuccato 2007-05-07 16:34 ` Alan Stern 0 siblings, 1 reply; 59+ messages in thread From: Diego Zuccato @ 2007-05-07 9:11 UTC (permalink / raw) To: Paul Fulghum; +Cc: linux-kernel, linux-usb-users Paul Fulghum ha scritto: > There is no one policy here that will make everyone happy. > Some will want all the data before some was lost, > others the data after some was lost. IMVHO the only sane thing is ALWAYS avoid "holes" (some old data, then the "hole" of lost data, then some new data) after a flush(). HW buffers (and buffers on the remote end) are not an issue: they contain fresher data (usually in "sliding window" mode) than buffered. Thinking with a 300bps modem (anybody else remembers such an ancient thing?): - Sender have to transmit the alphabet; - On the sender's modem there's a 4 char buffer - On the receiver's modem there's another 4 char buffer - The receiver's driver have another 4 char buffer If the receiver issues a flush() after reading 'C', then the next read() should return FGHIJKL...Z (or anything IN SEQUENCE), but *NEVER* DEFGKLM (skipped H,I and J). BYtE, Diego. ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [Linux-usb-users] [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-07 9:11 ` [Linux-usb-users] " Diego Zuccato @ 2007-05-07 16:34 ` Alan Stern 2007-05-07 16:51 ` Oliver Neukum 2007-05-07 17:58 ` Stephen Beaver 0 siblings, 2 replies; 59+ messages in thread From: Alan Stern @ 2007-05-07 16:34 UTC (permalink / raw) To: Diego Zuccato; +Cc: Paul Fulghum, linux-kernel, linux-usb-users On Mon, 7 May 2007, Diego Zuccato wrote: > Thinking with a 300bps modem (anybody else remembers such an ancient > thing?): I used a 110 bps modem for several years! Alan Stern ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [Linux-usb-users] [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-07 16:34 ` Alan Stern @ 2007-05-07 16:51 ` Oliver Neukum 2007-05-07 18:25 ` Alan Stern 2007-05-07 17:58 ` Stephen Beaver 1 sibling, 1 reply; 59+ messages in thread From: Oliver Neukum @ 2007-05-07 16:51 UTC (permalink / raw) To: Alan Stern; +Cc: Diego Zuccato, Paul Fulghum, linux-kernel, linux-usb-users Am Montag, 7. Mai 2007 18:34 schrieb Alan Stern: > On Mon, 7 May 2007, Diego Zuccato wrote: > > > Thinking with a 300bps modem (anybody else remembers such an ancient > > thing?): > > I used a 110 bps modem for several years! I knew 110 bps is slow, but what took you years to transmit? Regards Oliver ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [Linux-usb-users] [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-07 16:51 ` Oliver Neukum @ 2007-05-07 18:25 ` Alan Stern 0 siblings, 0 replies; 59+ messages in thread From: Alan Stern @ 2007-05-07 18:25 UTC (permalink / raw) To: Oliver Neukum; +Cc: Diego Zuccato, Paul Fulghum, linux-kernel, linux-usb-users On Mon, 7 May 2007, Oliver Neukum wrote: > Am Montag, 7. Mai 2007 18:34 schrieb Alan Stern: > > On Mon, 7 May 2007, Diego Zuccato wrote: > > > > > Thinking with a 300bps modem (anybody else remembers such an ancient > > > thing?): > > > > I used a 110 bps modem for several years! > > I knew 110 bps is slow, but what took you years to transmit? Back then the CPUs were a lot slower as well. Doing practically anything took a long time... Alan Stern ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [Linux-usb-users] [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-07 16:34 ` Alan Stern 2007-05-07 16:51 ` Oliver Neukum @ 2007-05-07 17:58 ` Stephen Beaver 1 sibling, 0 replies; 59+ messages in thread From: Stephen Beaver @ 2007-05-07 17:58 UTC (permalink / raw) To: Alan Stern, Diego Zuccato; +Cc: Paul Fulghum, linux-kernel, linux-usb-users Luxury! When I was a lad . . . . On 5/7/07 12:34 PM, "Alan Stern" <stern@rowland.harvard.edu> wrote: > On Mon, 7 May 2007, Diego Zuccato wrote: > >> Thinking with a 300bps modem (anybody else remembers such an ancient >> thing?): > > I used a 110 bps modem for several years! > > Alan Stern > ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 21:52 ` Alan Cox 2007-05-06 7:29 ` Antonino Ingargiola @ 2007-05-06 14:49 ` Paul Fulghum 1 sibling, 0 replies; 59+ messages in thread From: Paul Fulghum @ 2007-05-06 14:49 UTC (permalink / raw) To: Alan Cox Cc: Oliver Neukum, Antonino Ingargiola, linux-usb-users, linux-kernel Alan Cox wrote: > On Sat, 5 May 2007 20:07:15 +0200 > Oliver Neukum <oliver@neukum.org> wrote: >> should I understand this so that, if tty_buffer_request_room() returns >> less than requested, the rest of the data should be dropped on the >> floor? > > If it returns NULL then either there is > 64K buffered (we can adjust > that if anyone shows need - its just for sanity) or the system is out of > RAM. It sounds bad, but I think dropping the data make sense with the new tty buffering code. My interpretation of the tty buffering is that it is intended to be the main receive buffer facility for the driver. It simplifies and centralizes these functions so the driver does not need implement policies such as when to flush for user request, expand under load, crop when too large. It should not be the driver's responsibility to try and work around the tty buffering if it becomes full. That adds other complexity such as when the driver should attempt to push the data again: when more data is received? after a timeout? If the tty buffering runs dry, then maybe put out an error message. If the losses occur too often then the tty buffering code needs to be adjusted. -- Paul ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:08 ` Paul Fulghum 2007-05-05 16:15 ` Paul Fulghum 2007-05-05 16:36 ` Alan Cox @ 2007-05-05 16:46 ` Oliver Neukum 2007-05-05 16:56 ` Paul Fulghum 2 siblings, 1 reply; 59+ messages in thread From: Oliver Neukum @ 2007-05-05 16:46 UTC (permalink / raw) To: Paul Fulghum; +Cc: Antonino Ingargiola, Alan Cox, linux-usb-users, linux-kernel Am Samstag, 5. Mai 2007 18:08 schrieb Paul Fulghum: > If the line discipline throttles the driver input, > the cdc-acm driver stops giving data to the tty buffering > and instead stores them internally. So do usb serial drivers. > In the serial driver this usually just results in dropping > RTS to signal the remote end to stop sending. The serial This may take considerable time in the case of usb devices. > driver always immediately gives receive data to the tty buffering > without regard to the throttled state. > > I would argue that cdc-acm should do the same as the serial driver. Has this been tested? If so we could reduce the complexity of the throtteling logic in the usb drivers. Regards Oliver ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:46 ` Oliver Neukum @ 2007-05-05 16:56 ` Paul Fulghum 2007-05-05 17:09 ` Antonino Ingargiola 0 siblings, 1 reply; 59+ messages in thread From: Paul Fulghum @ 2007-05-05 16:56 UTC (permalink / raw) To: Oliver Neukum Cc: Antonino Ingargiola, Alan Cox, linux-usb-users, linux-kernel On Sat, 2007-05-05 at 18:46 +0200, Oliver Neukum wrote: > Am Samstag, 5. Mai 2007 18:08 schrieb Paul Fulghum: > > I would argue that cdc-acm should do the same as the serial driver. > > Has this been tested? > If so we could reduce the complexity of the throtteling logic in the usb > drivers. Antonino is doing so now. I think Alan nailed it: with the old tty buffering the extra logic was required to avoid data loss. The new tty buffering handles large blocks of data with no problem. Removing this part of the throttle logic makes the input flushing mechanism complete. -- Paul ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] 2007-05-05 16:56 ` Paul Fulghum @ 2007-05-05 17:09 ` Antonino Ingargiola 0 siblings, 0 replies; 59+ messages in thread From: Antonino Ingargiola @ 2007-05-05 17:09 UTC (permalink / raw) To: Paul Fulghum; +Cc: Oliver Neukum, Alan Cox, linux-usb-users, linux-kernel 2007/5/5, Paul Fulghum <paulkf@microgate.com>: > On Sat, 2007-05-05 at 18:46 +0200, Oliver Neukum wrote: > > Am Samstag, 5. Mai 2007 18:08 schrieb Paul Fulghum: > > > I would argue that cdc-acm should do the same as the serial driver. > > > > Has this been tested? > > If so we could reduce the complexity of the throtteling logic in the usb > > drivers. > > Antonino is doing so now. > > I think Alan nailed it: with the old tty buffering the extra > logic was required to avoid data loss. The new tty buffering > handles large blocks of data with no problem. > When I hit the problem originally I was using an FTDI device. I've tested it on multiple 3 linux machine machine: Ubuntu Dapper (kernel 2.6.15), Fedora Core 2 (dunno what kernel but surely older that 2.6.15) and Debian Etch (with 2.6.20 and 2.6.21) and all of then gave me corrupted data (while windows gave correct data). So all these kernel have this (or a related) problem. ~ Antonio ^ permalink raw reply [flat|nested] 59+ messages in thread
end of thread, other threads:[~2007-05-09 12:01 UTC | newest]
Thread overview: 59+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-04 8:38 [SOLVED] Serial buffer corruption [was Re: FTDI usb-serial possible bug] Antonino Ingargiola
2007-05-04 8:49 ` Oliver Neukum
[not found] ` <5486cca80705040229g53933671m658bd028cadca155@mail.gmail.com>
2007-05-04 9:33 ` Antonino Ingargiola
2007-05-04 13:41 ` Oliver Neukum
2007-05-04 14:45 ` Paul Fulghum
2007-05-04 14:56 ` Paul Fulghum
2007-05-04 14:49 ` Paul Fulghum
2007-05-04 16:04 ` Antonino Ingargiola
2007-05-04 16:56 ` Antonino Ingargiola
2007-05-04 18:02 ` Paul Fulghum
2007-05-04 17:13 ` Antonino Ingargiola
2007-05-04 17:20 ` Paul Fulghum
2007-05-04 17:25 ` Antonino Ingargiola
2007-05-04 17:41 ` Paul Fulghum
2007-05-04 18:46 ` Antonino Ingargiola
2007-05-04 19:06 ` Antonino Ingargiola
2007-05-04 19:49 ` Paul Fulghum
2007-05-04 21:21 ` Antonino Ingargiola
2007-05-04 10:57 ` Paul Fulghum
2007-05-05 9:53 ` Antonino Ingargiola
2007-05-05 9:56 ` Antonino Ingargiola
2007-05-05 10:19 ` Antonino Ingargiola
2007-05-04 23:30 ` Paul Fulghum
2007-05-05 8:26 ` Paul Fulghum
2007-05-05 15:11 ` Antonino Ingargiola
2007-05-05 16:43 ` Paul Fulghum
2007-05-05 16:08 ` Paul Fulghum
2007-05-05 16:15 ` Paul Fulghum
2007-05-05 16:26 ` Antonino Ingargiola
2007-05-05 16:58 ` Antonino Ingargiola
2007-05-05 17:04 ` Paul Fulghum
2007-05-05 18:08 ` Antonino Ingargiola
2007-05-05 18:35 ` Oliver Neukum
2007-05-06 7:06 ` Antonino Ingargiola
2007-05-09 9:53 ` Antonino Ingargiola
2007-05-09 10:42 ` Gene Heskett
2007-05-09 11:02 ` Gene Heskett
2007-05-09 12:00 ` Gene Heskett
2007-05-05 16:36 ` Alan Cox
2007-05-05 16:54 ` Oliver Neukum
2007-05-05 21:49 ` Alan Cox
2007-05-05 18:07 ` Oliver Neukum
2007-05-05 21:52 ` Alan Cox
2007-05-06 7:29 ` Antonino Ingargiola
2007-05-06 12:28 ` Alan Cox
2007-05-06 16:39 ` Antonino Ingargiola
2007-05-06 16:46 ` Alan Cox
2007-05-06 21:51 ` [Linux-usb-users] " Alan Stern
2007-05-07 8:07 ` Antonino Ingargiola
2007-05-06 14:35 ` Paul Fulghum
2007-05-07 9:11 ` [Linux-usb-users] " Diego Zuccato
2007-05-07 16:34 ` Alan Stern
2007-05-07 16:51 ` Oliver Neukum
2007-05-07 18:25 ` Alan Stern
2007-05-07 17:58 ` Stephen Beaver
2007-05-06 14:49 ` Paul Fulghum
2007-05-05 16:46 ` Oliver Neukum
2007-05-05 16:56 ` Paul Fulghum
2007-05-05 17:09 ` Antonino Ingargiola
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).