kernel (actually 3c59x.c)




    Sonny Parlin posted following.   Using a home grown  client/server
    app, Sonny has been able  to easily crash Linux.   The application
    is a simple udp sender/receiver.  The udp receiver runs on a Linux
    machine with a 3c905b Ethernet card which uses the latest  version
    of  the  3c59x.o  module  (v0.99L),  and  the kernel is 2.2.12-20.
    By sending the Linux  machine a 100MB file  as fast as the  sender
    can send it  on a 100Mbps  network, the Linux  machine responds by
    freezing up completely with a console message that states:

    eth1: Too much work in interrupt, status e481. Temporarily disabling functions(7b7e).

    Unfortunately, temporarily seems to  mean "forever"...  Here  is a
    snip from 3c59x.c:

        if (--work_done < 0) {
	        if ((status & (0x7fe - (UpComplete | DownComplete))) == 0) {
		        /* Just ack these and return. */
		        outw(AckIntr | UpComplete | DownComplete, ioaddr + EL3_CMD);
	        } else {
		        printk(KERN_WARNING "%s: Too much work in interrupt, status "
			           "%4.4x.  Temporarily disabling functions (%4.4x).\n",
			           dev->name, status, SetStatusEnb | ((~status) & 0x7FE));
		        /* Disable all pending interrupts. */
		        outw(SetStatusEnb | ((~status) & 0x7FE), ioaddr + EL3_CMD);
		        outw(AckIntr | 0x7FF, ioaddr + EL3_CMD);
		        /* The timer will reenable interrupts. */

    Notice the comment that says "Timer will reenable  interrupts"....
    That's not happening, my testing has been on two separate machines
    with the  same kernel/card/driver  and neither  machine ever comes
    back to life.  Same occurs on 2.2.13 kernels... so it really is  a
    nast one... nice  one to boot  out 100 mbit  boxes wich are  using
    this card a lot.


    Jonathan Poole found this is a problem in the original 3c905  NIC,
    and the 3com 905B.  He resolved his issues with buying a 3com905C.
    However, there's less costing solution.  3COM has new Linux driver
    source for 905B and 905C cards on their website.  This allows  the
    cards to run  at their full  potential and with  a great level  of