More definitive results as to the Linksys 10/100 problems
Brian Denheyer
briand@deldotd.com
Sat Feb 6 14:37:49 1999
OK. I _think_ it's official, there is a bug hiding in the driver or
the 82C169. Here's why I think so :
When running netpipe or netperf the system does one of two things :
1. the transfers STOP in the middle of the test. That's right,
complete with warnings about "the transmitter stopped". Gotta
reload the driver.
2. The box sending the packets gets an "ethernet frame too large"
error and the ethernet interface becomes very flaky and pretty much
unusable. Gotta reload the driver.
My set-up : I have two machines (FIC and ASUS motherboards). Both are
runnning 2.0.36 kernels. I have swapped cards between the systems. I
have swapped (the crossover) cables.
The nail in the coffin : My friend brought over 2 Samsung 1200TX cards
which use the real DEC21141 controller. We put them in the system,
used the exact same 0.90k driver which I have been using with the
linksys cards, ran netpipe and netperf in both directions without a
single problem and with transfer rates of 90-95Mbits/s.
*** The linksys cards do NOT work properly with the 0.90k (or 0.90f)
*** driver ! To be more specific, a linksys etherfast 10/100 cards with
*** an LC82C169, datecode 9836 does not not work properly with the
*** 0.90k(0.90f) drivers.
The only possibility now is that one of the cards is bad, highly
doubtful since they will work for a while before dying.
At the end of the e-mail I have provided some additional debugging
information with regards to the frame-size problem. It doesn't seem
to point me in any particular direction, I was hoping someone could
take a look and provide additional interpretation, and maybe let me
know in what direction to proceed.
Here is my plan. I'm going to order a couple of samsung cards and toss
these linksys cards in the junk-heap (I can't find my damn
receipt). However, until I get the new cards, I can keep working on
the problem if I can continue to get guidance on things to try. I
know hardware but I don't know ethernet. I figure by Thursday I'll
have the new cards and then that's the end of this annoying
experience.
Donald, you've got a lot of patience to have gotten all this sh*t
working with buggy docs and buggy chips !
Of course, Lite-On could pay me to figure out what's wrong :-)
Brian
Here's a data dump of the descriptors from one of the many failed
attempts to get these things to work. As Bill Paul pointed out the
status for entry 16 is almost totally meaningless, something has
really broken :
Feb 6 02:39:07 soggy kernel: eth0: Oversized Ethernet frame spanned multiple buffers, status 26cca300!
Feb 6 02:39:07 soggy kernel: cur_rx = 166960 entry = 16.
Feb 6 02:39:07 soggy kernel: csr5 = 02660010 csr6 = 812e2202.
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:0 status = 80000000 length = 00000600 bufffer1 = 01e16820 buffer2 = 00082830
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:1 status = 80000000 length = 00000600 bufffer1 = 03d8c028 buffer2 = 00082840
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:2 status = 80000000 length = 00000600 bufffer1 = 03d8c820 buffer2 = 00082850
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:3 status = 80000000 length = 00000600 bufffer1 = 00f46028 buffer2 = 00082860
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:4 status = 80000000 length = 00000600 bufffer1 = 00f46820 buffer2 = 00082870
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:5 status = 80000000 length = 00000600 bufffer1 = 016e1028 buffer2 = 00082880
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:6 status = 80000000 length = 00000600 bufffer1 = 016e1820 buffer2 = 00082890
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:7 status = 80000000 length = 00000600 bufffer1 = 01d6f028 buffer2 = 000828a0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:8 status = 80000000 length = 00000600 bufffer1 = 01d6f820 buffer2 = 000828b0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:9 status = 80000000 length = 00000600 bufffer1 = 01f09028 buffer2 = 000828c0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:10 status = 80000000 length = 00000600 bufffer1 = 01f09820 buffer2 = 000828d0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:11 status = 80000000 length = 00000600 bufffer1 = 02e4f028 buffer2 = 000828e0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:12 status = 80000000 length = 00000600 bufffer1 = 02e4f820 buffer2 = 000828f0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:13 status = 80000000 length = 00000600 bufffer1 = 006bc028 buffer2 = 00082900
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:14 status = 80000000 length = 00000600 bufffer1 = 006bc820 buffer2 = 00082910
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:15 status = 80000000 length = 00000600 bufffer1 = 033a2028 buffer2 = 00082920
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:16 status = 26cca300 length = 00000600 bufffer1 = 033a2820 buffer2 = 00082930
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:17 status = 00400300 length = 00000600 bufffer1 = 018dd028 buffer2 = 00082940
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:18 status = 80000000 length = 00000600 bufffer1 = 018dd820 buffer2 = 00082950
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:19 status = 80000000 length = 00000600 bufffer1 = 0336f028 buffer2 = 00082960
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:20 status = 80000000 length = 00000600 bufffer1 = 0336f820 buffer2 = 00082970
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:21 status = 80000000 length = 00000600 bufffer1 = 01802028 buffer2 = 00082980
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:22 status = 80000000 length = 00000600 bufffer1 = 01802820 buffer2 = 00082990
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:23 status = 80000000 length = 00000600 bufffer1 = 0256d028 buffer2 = 000829a0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:24 status = 80000000 length = 00000600 bufffer1 = 0256d820 buffer2 = 000829b0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:25 status = 80000000 length = 00000600 bufffer1 = 02de3028 buffer2 = 000829c0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:26 status = 80000000 length = 00000600 bufffer1 = 02de3820 buffer2 = 000829d0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:27 status = 80000000 length = 00000600 bufffer1 = 01cb9028 buffer2 = 000829e0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:28 status = 80000000 length = 00000600 bufffer1 = 01cb9820 buffer2 = 000829f0
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:29 status = 80000000 length = 00000600 bufffer1 = 02d29028 buffer2 = 00082a00
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:30 status = 80000000 length = 00000600 bufffer1 = 02d29820 buffer2 = 00082a10
Feb 6 02:39:07 soggy kernel: Dump of rx_ring descriptors.
Feb 6 02:39:07 soggy kernel: entry:31 status = 80000000 length = 02000600 bufffer1 = 02967028 buffer2 = 00082820