libftdi Archives

Subject: Re: [libftdi-1.0] Limit read buffer chunksize to 16384 on Linux

From: Thomas Jarosch <thomas.jarosch@xxxxxxxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Date: Mon, 15 Feb 2010 10:36:51 +0100
Hello Jie,

On Sunday, 14. February 2010 12:17:58 Jie Zhang wrote:
> On Sun, Feb 14, 2010 at 5:58 PM, Jim Paris <jim@xxxxxxxx> wrote:
> >> +#ifdef __linux__
> >> +    /* We can't set readbuffer_chunksize larger than
> >> MAX_BULK_BUFFER_LENGTH, +       which is defined in libusb-1.0.
> >>  Otherwise, each USB read request will +       be divided into
> >> multiple URBs.  This will cause issues on Linux kernel +       older
> >> than 2.6.32.  */
> >> +    if (chunksize > 16384)
> >> +        chunksize = 16384;
> >
> > Shouldn't this be
> >
> >> +    if (chunksize > MAX_BULK_BUFFER_LENGTH)
> >> +        chunksize = MAX_BULK_BUFFER_LENGTH;
> 
> MAX_BULK_BUFFER_LENGTH is a macro defined in an internal header file
> in libusb. So we can't use it here.

Hmm, here's a comment from libusb 1.0:

        /* usbfs places a 16kb limit on bulk URBs. we divide up larger requests
         * into smaller units to meet such restriction, then fire off all the
         * units at once. it would be simpler if we just fired one unit at a 
time,
         * but there is a big performance gain through doing it this way. */
        int num_urbs = transfer->length / MAX_BULK_BUFFER_LENGTH;

Just guess what happens if the usbfs restriction is resolved
and libusb adjusts the interface... this -will- break.

Is there some data structure we could read out?
Or include the internal header file during the build
stage of libftdi to determine the value?

btw: Thanks for applying the other patches!

Cheers,
Thomas

--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread