From 8de6eea49cd2689d79d4c27467fcfd3dde121d15 Mon Sep 17 00:00:00 2001 From: Jie Zhang Date: Sun, 14 Feb 2010 08:44:23 +0800 Subject: [PATCH] Limit read buffer chunksize to 16384 on Linux. --- src/ftdi.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/src/ftdi.c b/src/ftdi.c index 22e746d..afcf897 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -1621,6 +1621,14 @@ int ftdi_read_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksi // Invalidate all remaining data ftdi->readbuffer_offset = 0; ftdi->readbuffer_remaining = 0; +#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 devided into multiple URBs. This will cause issues on Linux kernel + older than 2.6.32. */ + if (chunksize > 16384) + chunksize = 16384; +#endif if ((new_buf = (unsigned char *)realloc(ftdi->readbuffer, chunksize)) == NULL) ftdi_error_return(-1, "out of memory for readbuffer"); -- 1.7.1