Linux Kernel 2.6.39 Serial Port Buffering reduced to 16?

I’ve recently upgraded my system to running the linux kernel 2.6.39 from and I noticed a change in my application.

I read a large set of binary data from a serial port, requesting a large size chunk, and re-requesting data until my read operation has completely read the data I’m looking for.

On the previous version of the kernel I was consistently getting data in block sizes of around 89. Since I’ve switched to 2.6.39 it seems that all of my read requests return a maximum of 16 bytes.

I’ve looked in the files arch/arm/mach-omap2/serial.c and arch/arm/mach-omap2/board-omap3beagle.c but did not seem to find references to a uart buffer size.

My program handles the smaller number being returned, but creates more debugging track points since it use more looping to get the entire data set. I’m just wondering if anyone knows where the code that changed is located, so that I can read about the reasoning behind the change, or if it’s now a modifiable structure at runtime that I’m not initializing somewhere?


Have you setup the serial port with termios.h or the stty command line utility? (the former is suggested for your final program)

I have the termios.h file included, and use tcgetattr() and tcsetattr() for the primary port configuration as well as cfsetispeed() and cfsetospeed() for making sure that my speeds are set correctly.

If there’s a command to set the underlying buffer size to be used, I’ve not noticed it but would appreciate being told what it is.