Subject: Re: com driver problems
To: None <firstname.lastname@example.org>
From: Gordon W. Ross <email@example.com>
Date: 11/18/1996 18:33:38
> Date: Mon, 18 Nov 1996 14:46:22 -0600
> From: "Phil Knaack" <firstname.lastname@example.org>
> >After some digging in the kernel, I found that it loops in com.c, procedure
> >comopen, with the following statement:
> >/* flush any pending I/O */
> >while (ISSET(bus_space_read_1(iot, ioh, com_lsr), LSR_RXRDY))
> > (void) bus_space_read_1(iot, ioh, com_data);
> >Somehow, it seems that there always are pending incoming packets (although
> >there is nothing connected to the port!). Do I have broken hardware?
> I don't know if this helps any, but I have a 386/33 with a serial
> console which once in a while, whenever I turn off its terminal (a Microterm
> 5510), the serial port goes mad and inputs data constantly (I first noticed
> because 'ruptime' from a neighbor machine reported solid 1.00 load for the
> previous couple of days, and I discovered the data coming in was spawning
> getty's madly).
> In any case, this happened only occasionally, and only with a
> particular I/O card; I came to the conclusion that it was flaky hardware.
If you setup the UART to interrupt on every status line change, then
it is quite possible that you may get a stream of interrupts that is
faster than what your machine can handle. (Even a fast machine!)
Either a floating input line, or a nasty peripheral can do it.
By the way, many PC async cards do this with floating inputs.
There is not much one can do except try to detect this in the driver
and disable the interrupt.