Overrun errors on multiport serial card with 2.6 kernel
I am working on IP/GSM gateways with embedded 126.96.36.199 version of kernel. Processor is Intel Celeron on 400 MHz.
For GSM communication, I am using GSM cards (2 of them) put into PCI slots. Every GSM card has 4 GSM modules on it that are managed using 4 serial ports on 57600 bauds. Each GSM card has one Phillips or Exar 16C554 quad UART to access those serial ports.
So basically, I have 8 serial ports with 8 UARTs I am managing in real time. Each serial port is configured on start up using command like this:
setserial /dev/ttySx port port_address irq 12 uart 16550A baud_base 230400 spd_cust divisor 4 share_irq
where port_address is got from lspci -v and x is going from 3 to 10.
My problem is that I am getting overrun errors from time to time that I cannot get rid of. I have tried to set low_latency flag to setserial, recompiled kernel with CONFIG_PREEMPT enabled and tried to give serial IRQ higher priority (by programming 8259 PIC) but nothing helped.
Overruns can easily be provocated by putting some load on system (lets say by copying some 10 Mb file over FTP).
One thing that surely helps is to lower port speed to 19200 bauds (no overruns in that case), but that is not what I want:-(. At absolutely same conditions, there is no such problems when using Windows:-( (57600 bauds, high I/O load, no overruns).
So I am wondering if I configured my serial ports wrong. Maybe they should be configured as multiport cards, but I think that 2.6 kernel does not support them (I am getting Cannot get multiport config: Invalid argument error).
Any suggestion will be appreciated.