Re: eth0 interrupt handler problem in 2.1.10x on alpha

Paul Gortmaker (paul@rasty.ph.unimelb.edu.au)
Wed, 10 Jun 1998 15:14:27 +1000 (EST)


> Hi folks,
>
> I have tried 2.1.105 (and some previous ones too) on an AlphaPC 164 LX (Durango
> II) machine. Hardware is 600 MHz alpha EV56, 128 MB RAM, Adaptec 2940,
> ncr53c810a, PCI NE2000 clone, ES1688 AudioDrive.
>
> Software is RH 5.0, BFD 2.9.1.0.4, EGCS 1.0.3, plus the recommended updates
> from the Changes file.
>
> I can compile the kernel without problems. Compiled *without* SMP.
>
> Then things seem to go normally, until the system tries to mount NFS
> partitions, at which point a whole bunch of messages are displayed:
> eth0: Reentering the interrupt handler! isr=0x70 imr=0x0.
> eth0: Reentering the interrupt handler! isr=0x1 imr=0x0.

For others that are having this problem, a fix is to remove the
bogus "sti()" from the 8390 interrupt handler (8390.c). Some of the
dis/enable_irq() stuff for SMP may also be avoided -- masking IRQs
on the card should be sufficient (if done in all the right places).

[Note: I am not 100% sure on the SMP stuff as I am still trying to
clarify in my mind just what default exclusion guarantees exist on
SMP between (a) IRQ handlers and (b) themselves and (c) bh handlers.
Regardless, doing a __global_sti on each net IRQ is just plain wrong.]

>From searching the patches, I found the sti() was included in 2.1.49 to
8390.c, along with adding SA_INTERRUPT to the ne2000 interrupt handler,
so I suspect it was an "attempt" to fix SMP behaviour. (Of course
this neglects the fact that 10 or so other drivers also use 8390.c
without SA_INTERRUPT). Then in 2.1.60, the SA_INTERRUPT was tossed
from ne.c when the SA_SHIRQ flag was added, but the sti was left behind.

[Minor gripe: it would have been nice if whoever did these patches had
at least cc'd me as per the MAINTAINERS file and the big fat warning at
the top of 8390.c -- even though I was travelling during a large part of
the 2.1.x development cycle, I was still following e-mail.]

Paul.

--- linux-21105/drivers/net/8390.c Wed Jun 10 13:49:33 1998
+++ linux/drivers/net/8390.c Tue Jun 9 13:42:25 1998
@@ -334,7 +334,6 @@
}

dev->interrupt = 1;
- sti();

/* Change to page 0 and read the intr status reg. */
outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu