[vortex-bug] sporadic "eth0: Transmit error, Tx status register 82." Errors

Donald Becker becker@scyld.com
Sat, 29 Jul 2000 14:09:15 -0400 (EDT)


On 29 Jul 2000, Andi Hechtbauer wrote:

> I'm using 3c59x.c:v0.99H 11/17/98 Donald Becker with two 
> 3Com 3C905B 100bTX (rev 48) NICs in a AMD-K6(tm) 3D /400
> Linux 2.2.12 Machine.
...
> Since then I'm seeing sporadic 
> "eth0: Transmit error, Tx status register 82." Messages in
> our logs, and reading the list archive I found this may be
> caused by various things:

You missed the real reason. It's clearly described at
   http://www.scyld.com/network/vortex.html

0x82  Out of window collision.  This typically occurs when
      some other Ethernet host is incorrectly set to full duplex on a half
      duplex network.

>            RX packets:1974491954 errors:56 dropped:0 overruns:88458 frame:89
> This bothers me. (and I'm not talking about the inet addr part ;-)
> Please tell me it should not?!

This *should* bother you.  Some other host is hosing your network.  The
driver usually recovers from out-of-window collisions, but that's not a
well-tested code path.  I can generate a few random out-of-window collisions
by forcing the link partner to full duplex, but I don't currently have the
set-up to generate heavy streams of them.


> The system is a server under high network load and works
> reliably;  every some weeks or so, though, the NIC which
> really does all the work (eth0), stops doing just that.

Are there any messages?

The driver version has a bug where, when it has too much work to do,
disables its interrupts with the message:
  "%s: Too much work in interrupt, status %4.4x.
    Temporarily disabling functions (%4.4x).\n"
This was code was intended to protect the machine when the hardware failed
or the network load was far too high to handle.

The comment after the interrupts are disabled line says
		/* The timer will reenable interrupts. */
however the code to do this is missing!
This bug was fixed in a subsequent version (99H is pretty old!) by doing
	outw(vp->status_enable, ioaddr + EL3_CMD);
in the timer code after this occured.


Even if you don't see the message, you can find out if this has occured by
running  vortex-diag

>  $> sudo ./vortex-diag -v
>  vortex-diag.c:v2.02 7/1/2000 Donald Becker (becker@scyld.com)
>  Index #1: Found a 3c905B Cyclone 100baseTx adapter at 0xdc00.
>   Indication enable is 06c6, interrupt enable is 06de.
                         ^^^^
This value will be changed to disable interrupt sources.

>  Parsing the EEPROM of a 3Com Vortex/Boomerang:
...
>    Vortex format checksum is incorrect (006e vs. 10b7).
>    Cyclone format checksum is correct (0x06 vs. 0x06).
>    Hurricane format checksum is correct (0x06 vs. 0x06).

You shouldn't be concerned about these messages.
3Com incompatibly extended the EEPROM format several times.  The format
changes didn't follow generation boundaries, so the only thing we can do is
calculate all of the checksums and assume that if one matches, that is the
format being used.

Donald Becker				becker@scyld.com
Scyld Computing Corporation		http://www.scyld.com
410 Severn Ave. Suite 210		Beowulf Clusters / Linux Installations
Annapolis MD 21403