rtl8139 trouble in 2.3.99pre5

From: Gerard Sharp (gsharp@ihug.co.nz)
Date: Tue Apr 18 2000 - 05:02:37 EST


Hello

I suspect I have found a problem in 8139too.o - I know for certain
something is wrong, and I suspect it's down to this code; or an
interaction of it with my system.

When my lan is under reasonable load (ie, a few hundred MB being copied
from an nfs-mount drive), sometimes the eth0 interface stops working.
setting the hdd to use DMA (hdparm -d1 /dev/hda) helps, but doesn't
eliminate the problem.

with a bit of effort, I have managed to log the following details:
===
Apr 18 21:44:30 midnight kernel: rtl8139_weird_interrupt: eth0: Abnormal
interrupt, status 00000051.
Apr 18 21:44:30 midnight kernel: rtl8139_rx_interrupt: eth0: Ethernet
frame had errors, status 19fb9dac.
Apr 18 21:44:30 midnight kernel: rtl8139_rx_interrupt: eth0: Oversized
Ethernet frame, status 19fb9dac!
Apr 18 21:44:30 midnight kernel: rtl8139_weird_interrupt: eth0: Abnormal
interrupt, status 00000030.
Apr 18 21:44:30 midnight kernel: rtl8139_weird_interrupt: eth0: Abnormal
interrupt, status 00000020.
===
At this point, the network is unusable; pings to anywhere down the link
are never returned, and the values in /proc/net/dev don't increment.

My solution is to run "ifdown eth0; sync; sync; wait 1; ifup eth0;
sync"; which will, in 99% of all cases return life to eth0. If it
doesn't, I repeat until it works.
At this time, the following is logged:
===
Apr 18 21:44:58 midnight kernel: rtl8139_close: eth0: Shutting down
ethercard, status was 0x0000.
Apr 18 21:44:59 midnight kernel: rtl8139_weird_interrupt: eth0: Abnormal
interrupt, status 00000020.
Apr 18 21:44:59 midnight kernel: rtl8139_open: eth0: rtl8139_open()
ioaddr 0xe8000000 IRQ 9 GP Pins 0c half-duplex.
Apr 18 21:45:01 midnight kernel: rtl8139_weird_interrupt: eth0: Abnormal
interrupt, status 00002020.
===

I also have rigged up a second-by-second dump of /proc/net/dev
For the time period show above, it records:

The column spacing is lost, so the columns are, from left to right:
time eth0: (rx) bytes, packets, errors, dropped, fifo, carrier,
compressed, multicast,
(tx) bytes, packets, errors, dropped, fifo, collisions, carrier,
compressed
===
21:44:29 eth0: 771312 625 0 0 0 0 0 0 42775 275 0 0 0 0 0 0
21:44:30 eth0: 2754017 2006 0 0 0 0 0 0 134189 738 0 0 0 0 0 0
21:44:31 eth0: 2861181 2082 4 12 3 5 0 0 144097 788 0 0 0 0 0 0
21:44:32 eth0: 2861181 2082 4 12 3 5 0 0 144097 788 0 0 0 0 0 0
21:44:33 eth0: 2861181 2082 4 12 3 5 0 0 146473 800 0 0 0 0 0 0
21:44:34 eth0: 2861181 2082 4 12 3 5 0 0 146473 800 0 0 0 0 0 0
21:44:35 eth0: 2861181 2082 4 12 3 5 0 0 148849 812 0 0 0 0 0 0
21:44:36 eth0: 2861181 2082 4 12 3 5 0 0 148849 812 0 0 0 0 0 0
21:44:37 eth0: 2861181 2082 4 12 3 5 0 0 148849 812 0 0 0 0 0 0
21:44:38 eth0: 2861181 2082 4 12 3 5 0 0 148849 812 0 0 0 0 0 0
21:44:39 eth0: 2861181 2082 4 12 3 5 0 0 148849 812 0 0 0 0 0 0
21:44:40 eth0: 2861181 2082 4 12 3 5 0 0 148849 812 0 0 0 0 0 0
21:44:41 eth0: 2861181 2082 4 12 3 5 0 0 151225 824 0 0 0 0 0 0
21:44:42 eth0: 2861181 2082 4 12 3 5 0 0 153601 836 0 0 0 0 0 0
21:44:43 eth0: 2861181 2082 4 12 3 5 0 0 153601 836 0 0 0 0 0 0
21:44:44 eth0: 2861181 2082 4 12 3 5 0 0 153601 836 0 0 0 0 0 0
21:44:45 eth0: 2861181 2082 4 12 3 5 0 0 155977 848 0 0 0 0 0 0
21:44:46 eth0: 2861181 2082 4 12 3 5 0 0 155977 848 0 0 0 0 0 0
21:44:47 eth0: 2861181 2082 4 12 3 5 0 0 155977 848 0 0 0 0 0 0
21:44:48 eth0: 2861181 2082 4 12 3 5 0 0 155977 848 0 0 0 0 0 0
21:44:49 eth0: 2861181 2082 4 12 3 5 0 0 155977 848 0 0 0 0 0 0
21:44:50 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:44:51 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:44:52 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:44:53 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:44:54 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:44:55 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:44:56 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:44:57 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
* ifdown etc at this point *
21:44:58 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:45:00 eth0: 2861181 2082 4 12 3 5 0 0 158353 860 0 0 0 0 0 0
21:45:01 eth0: 2861181 2082 4 12 3 5 0 0 158413 861 0 0 0 0 0 0
21:45:02 eth0: 2874199 2092 4 12 3 5 0 0 159067 865 0 0 0 0 0 0
21:45:03 eth0: 2874304 2093 4 12 3 5 0 0 159194 867 0 0 0 0 0 0
21:45:04 eth0: 2874304 2093 4 12 3 5 0 0 159194 867 0 0 0 0 0 0
21:45:05 eth0: 4212884 3023 4 12 3 5 0 0 220772 1178 0 0 0 0 0 0
21:45:06 eth0: 7118898 5042 4 12 3 5 0 0 354026 1851 0 0 0 0 0 0
===
at this time the link was working correctly again.

I have ported the "8139 showstopper" patch from 2.2.15pre16, and
recompiled with that; and it made exactly zero difference.

The "status" at which it barfs isn't always constant either. for
example:
===
Apr 18 20:31:51 midnight kernel: rtl8139_rx_interrupt: eth0: Ethernet
frame had errors, status cccccccc.
Apr 18 20:31:51 midnight kernel: rtl8139_rx_interrupt: eth0: Oversized
Ethernet frame, status cccccccc!
Apr 18 20:57:03 midnight kernel: rtl8139_rx_interrupt: eth0: Ethernet
frame had errors, status 98fb6f83.
Apr 18 21:06:39 midnight kernel: rtl8139_rx_interrupt: eth0: Ethernet
frame had errors, status 2b67527b.
Apr 18 21:06:39 midnight kernel: rtl8139_rx_interrupt: eth0: Oversized
Ethernet frame, status 2b67527b!
===

Thank you for taking the time to read all the way down to here :)

Gerard Sharp

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Apr 23 2000 - 21:00:12 EST