[vortex] Strange problem with 3c905A

Andrew Morton akpm@zip.com.au
Sun, 05 Aug 2001 17:48:30 -0700


Ville Herva wrote:
> 
> [I'll read the archive, but please Cc me]
> 
> kernel 2.2.8pre19 + it's stock 3c59x.c, SMP, 3c905A.

2.2.8?  Or 2.2.18??  Please confirm...

Your APIC (the thing which controls interrupts on SMP) has
lost its brains, and no interrupts are being delivered.

Donald's drivers have a sneaky pseudo-polling fallback mode
which allows them to continue to limp along when interrupts
aren't being delivered, which is why the interface still
responds to some pings.  The idea here is that there's enough
throughput to allow you to telnet in and reboot.

Nobody *really* seems to have a 100% explanation for this, but
it's certainly the case that it's due to a race between the
linux disable_irq() function and the delivery of a hardware
interrupt.  Drivers which don't use disable_irq() will never
experience this.  It only happens on SMP.

There's a fix in 2.4.x-ac kernels which works just fine.
It's *still* not in Linus' 2.4.x kernels (grump).

I have seen very few if any reports of it occurring on 2.2.x kernels.

One fix is of course to stop using disable_irq().  I'd rather
not have to do that - it's quite convenient to use this function
in the media timer handler.

You can make it stop happening by booting with the `noapic' LILO
option.