Transmit Underflow Problems

Transmit underflow occurs when the lnc hardware tries to send a message before the entire message has been DMAed to the card SRAM (the idea being to pipeline the data transfer). If the card tries to send data that hasn't been DMAed yet, then a transmit underflow condition occurs. As far as I can tell, this is just plain wrong and the card should not be doing this. (AMD's web site blames the motherboard saying that it is not providing sufficient DMA bandwidth to the card. I guess this means that AMD relies on timing to prevent this error, and the timing is motherboard dependent.)

The following patch to i386/isa/if_lnc.c from the 3.2-RELEASE tree fixes this problem for the AMD Am79C972 chipset. This has only been tested with the Am79C972 (PCnet-FAST+). The patch sets the "no underflow" bit in the driver, which means that the card will not try to transmit a message until the entire message has been DMAed to the card SRAM. This fix gets rid of all my annoying kernel log messages, and takes the ftp throughput between two HP Kayaks on a 100Mbps network from about 300-700KB/sec to 10MB/sec. :)