Bug 9283

Summary: 3c905b hangs under heavy load
Product: [Retired] Red Hat Linux Reporter: Brian Brock <bbrock>
Component: kernelAssignee: Michael K. Johnson <johnsonm>
Status: CLOSED CURRENTRELEASE QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: 6.1CC: sparlin, teg
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2001-04-18 20:48:54 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Brian Brock 2000-02-09 21:45:00 UTC
From a customer:

Using a home grown client/server app, I have 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:

---------snip-----------
                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. */
                                break;

}
}
---------snip-----------

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. Has anyone else seen this?? Any solutions?? Is this a driver
problem or a kernel problem
or what?? I can post the source code to the app used to freeze the linux
machine, but it's just a simple
udp receiver that reads from the socket and writes to disk...

Comment 1 Kim Zayac 2000-02-10 23:39:59 UTC
I am having a similiar problem with 3 of my servers running Linux 6.1 with 3Com
Network Cards.  My problem relates to apache/web server application(s) which
like your app would burst large files out via the Ehternet Card.

I do not get the message..  But that is because the screen blanker probably
kicks in or something...  I have read somewhere that kernel 2.2 made some change
to IRQ processing and older versions of Dlink drivers hung Linux.

Comment 2 Alan Cox 2000-08-08 19:30:29 UTC
Workaround for 6.1 users

load the module with max_interrupt_work=10000


Comment 3 Trond Eivind Glomsrxd 2001-04-18 20:48:49 UTC
Is this still a problem with the recently released 2.2.19-6.2.1 errata kernel?

Comment 4 Trond Eivind Glomsrxd 2002-08-21 18:24:04 UTC
Closing due to lack and feedback, besides RHL 6.1 is no longer supported...