Bug 9283 - 3c905b hangs under heavy load
Summary: 3c905b hangs under heavy load
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: kernel   
(Show other bugs)
Version: 6.1
Hardware: i386
OS: Linux
Target Milestone: ---
Assignee: Michael K. Johnson
QA Contact:
Depends On:
TreeView+ depends on / blocked
Reported: 2000-02-09 21:45 UTC by Brian Brock
Modified: 2008-05-01 15:37 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2001-04-18 20:48:54 UTC
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

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

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),
++ EL3_CMD);
                                outw(AckIntr | 0x7FF, ioaddr + EL3_CMD);
                                /* The timer will reenable interrupts. */


Notice the comment that says "Timer will reenable interrupts".... That's
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...

Note You need to log in before you can comment on or make changes to this bug.