Linux serial port dropping bytes

Hi all,

I'm using an Arcom Viper PXA255 single board computer running Linux, and I'm trying to receive bytes over the built-in RS-422 serial port at 921.6 kbps. The received packets are 1500 bytes long. The UART is a 16C2850 (dual port version of the 16C850 with 128 byte FIFO).

Everything works fine at low speeds, but if the packet rate increases, I start to lose bytes.

I believe this is caused by the Linux serial port interrupt handler not responding fast enough. Some testing revealed that this problem only occurs when other peripherals (such as the flash drive or ethernet port) are active.

I searched online and found a utility called IRQtune which promises to fix exactly this sort of problem by allowing control of ISR priorities in Linux. Unfortunately, IRQtune only works for x86 processors.

Does anybody know of a simple way to modify the priorities of interrupts in Linux? I don't mind recompiling the kernel, but I don't have a lot of expertise in that sort of thing. (In fact, I would have preferred skipping the whole OS thing and implementing the entire solution on an FPGA/uController, but oh well... one doesn't always get to choose.)

Any advice would be greatly appreciated. Thanks!


remove the .nospam and rearrange appropriately to e-mail.