[lkml]   [2008]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Handshaking on USB serial devices
    Greg KH wrote:
    > On Thu, Feb 14, 2008 at 07:55:44PM +1030, David Newall wrote:
    >> The current 2.6 driver maintains it's own buffer. I think that's a bad
    >> thing: usbserial already buffers writes, and the extra buffer copy seems
    >> unnecessary, however it does solve the putchar problem. Buffered (i.e.
    >> by the 2.6 series pl2303 driver) data is written as soon as practicable,
    >> regardless of CTS/DTR. The same general workaround, but placed in
    >> pl2303_send seems correct to me; that is, stop submitting write urbs
    >> when the remote end lowers CTS/DTR, and trigger the resume from the
    >> interrupt callback (specifically in update_line_status.)
    > Where does the usbserial core buffer writes on 2.6? The serial_write()
    > function just passes the data straight down to the usb-serial child
    > driver directly, no copying or buffering happens that I can see.

    You're right. I haven't examined the 2.6 stack as closely as the 2.4.
    I noticed the buffer in 2.6 pl2303, but didn't check 2.6 usb-serial. I
    think I prefer the buffer in usb-serial, because its centralised rather
    than in each driver, but I'm not going to step up to the plate and
    propose changing that!

    >> To make it clear: Even aside from the buffer in 2.6's pl2303.c, there's
    >> a race: An in-flight write URB can fill all hardware buffers, making
    >> unsafe what previously appeared to be a safe write. I think it's
    >> essential to delay submission of the URB on a stop-transmit condition.
    > It's up to the individual driver to know when their buffers are filled
    > up. The big problem is, a lot of these cheap usb-serial devices (like
    > the pl2303) don't have a way to report the uart queue filled-state back
    > to the host, so things can easily get over-run as you have found out.

    My understanding of the problem has developed over the last couple of
    days; going from wrist-deep to elbow-deep into the guts of things does
    that. There is a problem, and the solution I've been developing
    addresses it, but maybe there's a simpler answer. Hope to have a patch
    together soon.

     \ /
      Last update: 2008-02-15 06:23    [W:0.022 / U:3.800 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site