Subject: kern/15448: com at isa can't cope well >230kbps
To: None <>
From: None <>
List: netbsd-bugs
Date: 01/31/2002 13:01:39
>Number:         15448
>Category:       kern
>Synopsis:       com at isa can't cope well >230kbps
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Thu Jan 31 13:02:00 PST 2002
>Originator:     Wojciech Puchar
>Release:        1.5.2
NetBSD 1.5.2 NetBSD 1.5.2 (router.posejdon) #3: Thu Jan 31 21:40:44 CET 2002 i386

ISA com driver con't cope with interrupt load on ISA based 16550A cards
with speed 460kbps or more (in contrast to 16650 based PCI cards which works perfect)
use pppd on 460kbps link with ISA RS-232 card. 
system works SLOOOOW and lots of silo overflows appear
it does not depend much of CPU speed (similar on 486/25 with slow RAM and 486/80 with
60ns RAM and even on pentium)
it looks like original com code author though that on high speed CPU reaction can be 
slow and he/she turns threshold lower on high speed.

this patch turns this highest possible (at 14 of 16 bytes) as CPU is enough fast
to react, but this generates 14/4=3.5 times less interrupts on ISA

however i did no test on REALLY slow machine (386SX).
maybe it should be option for this.

--- com.c.orig  Thu Jan 31 21:33:40 2002
+++ com.c       Thu Jan 31 21:40:16 2002
@@ -1414,7 +1414,8 @@
        else if (ISSET(sc->sc_hwflags, COM_HW_FIFO))
                sc->sc_fifo = FIFO_ENABLE |
                    (t->c_ospeed <= 1200 ? FIFO_TRIGGER_1 :
-                    t->c_ospeed <= 38400 ? FIFO_TRIGGER_8 : FIFO_TRIGGER_4);
+//                  t->c_ospeed <= 38400 ? FIFO_TRIGGER_8 : FIFO_TRIGGER_4);
+                    FIFO_TRIGGER_14);
                sc->sc_fifo = 0;