[realtek] RTL8139C gets stuck with Abnormal Interrupt / Oversized Frame errors

Vladimir I. hazard@francoudi.com
Sat Nov 16 18:17:01 2002


Hello,

It looks like a popular question, but my search didn't result in 
a "yes" or "no" answer, so here it goes.

Under high load the integrated RTL8139C seem to get stuck. The
motherboard is an AMD ELAN 486DX4-100 Mhz and has integrated
PCMCIA slot (PCI-to-Cardbus bridge), in which a wireless 
card is inserted.

As soon as there is a high-speed transfer from Ethernet to
wireless (or vice versa)  the chances of Ethernet getting stuck
get very high. The CPU is really loaded during these moments as
it's busy polling PCMCIA card (it doesn't support bus master).
However, the traffic is not huge - around 2 mbps.

So, the Ethernet gets stuck with the following message:

kernel: eth0: Abnormal interrupt, status 00000011.
kernel: eth0: Oversized Ethernet frame, status 63b9096a!
kernel: eth0: Abnormal interrupt, status 00000070.
kernel: eth0: Abnormal interrupt, status 00000021.

Bringing the interface down, unloading the module, loading 
it back makes it work again for unpredictable amount of time.

Any ideas on how to solve this problem? Is it possible to add 
some kind of card reinitialization code when the "Oversized 
Ethernet frame" error appears, as it always leads to the card 
getting stuck? Will changing to half-duplex 10 Mbps help?

The only thing I found out is that connecting to a switch 
supporting 802.3X flow control seems to help a lot, but still 
does not 100% solve the problem.

Linux kernel 2.4.18.
Jan 24 05:11:09 thq-r kernel: rtl8139.c:v1.17 1/28/2002 Donald Becker, becker@scyld.com.
Jan 24 05:11:09 thq-r kernel: eth0: RealTek RTL8139C Fast Ethernet at 0x1000, IRQ 10, 00:e0:4c:39:05:f2.

The outputs below are from a WORKING (non-stuck) card:

mii-diag:

Using the default interface 'eth0'.
Basic registers of MII PHY #32:  1100 782d 0000 0000 01e1 45e1 0001 0000.
 The autonegotiated capability is 01e0.
The autonegotiated media type is 100baseTx-FD.
 Basic mode control register 0x1100: Auto-negotiation enabled.
 You have link beat, and everything is working OK.
 Your link partner advertised 45e1: Flow-control 100baseTx-FD 100baseTx
10baseT-FD 10baseT, w/ 802.3X flow control.
   End of basic transceiver information.

rtl8139-diag.c: v2.04 8/08/2001 Donald Becker (becker@scyld.com)
 http://www.scyld.com/diag/index.html
Index #1: Found a RealTek RTL8139 adapter at 0x1000.
The RealTek chip appears to be active, so some registers will not be read.
To see all register values use the '-f' flag.
RealTek chip registers at 0x1000
 0x000: 394ce000 0000f205 80001000 00000000 0018a1f3 0018a5ea 0018a052 0018a042
 0x020: 00e98010 00e98610 00e98c10 00e99210 00e90000 0d0a0000 cfe8cfd8 0000c07f
 0x040: 74000400 0000940e 56f13cb4 00000000 006c1000 00000000 0088c100 00100000
 0x060: 1100f00f 01e1782d 000145e1 00000000 00000004 000207c8 b0f243b9 8a36df43.  No interrupt sources are pending.
 The chip configuration is 0x10 0x6c, MII full-duplex mode.

rtl8139-diag.c:v2.04 8/08/2001 Donald Becker (becker@scyld.com)
 http://www.scyld.com/diag/index.html
Index #1: Found a RealTek RTL8139 adapter at 0x1000.
 The RTL8139 does not use a MII transceiver.
 It does have internal MII-compatible registers:
   Basic mode control register   0x782d.
   Basic mode status register    0x1100.
   Autonegotiation Advertisement 0x01e1.
   Link Partner Ability register 0x45e1.
   Autonegotiation expansion     0x0001.
   Disconnects                   0x0000.
   False carrier sense counter   0x0000.
   NWay test register            0x0004.
   Receive frame error count     0x0000.

-- 
Best Regards,
Vladimir
Systems Engineer (RHCE)