[2.2 patch] drivers/net/3c59x.c

From: Andrew Morton (andrewm@uow.edu.au)
Date: Wed Apr 05 2000 - 21:54:17 EST


Alan,

There is an initialisation problem in this driver which could cause
machine lockups under heavy load. I recommend that the fix be fed back
into 2.2.

Details are at http://www.wcug.wwu.edu/lists/netdev/200004/msg00019.html

Briefly, the initialisation is not masking off the RxComplete bit in the
3c905 interrupt enable register. This creates a small time window in
which it is visible to the processor. If the driver is serving a 3c905
and an updateStats or error interrupt happens to coincide with packet
reception, the ISR will call vortex_rx() and never return.

The patch is attached.

I believe this problem also affects 3c515.c, but a fix is a little more
complex and I don't have the gear to test it.

--- linux-2.2.15-pre9/drivers/net/3c59x.c.orig Thu Apr 6 12:39:17 2000
+++ linux-2.2.15-pre9/drivers/net/3c59x.c Thu Apr 6 12:41:16 2000
@@ -1163,7 +1163,8 @@
                 (vp->full_bus_master_tx ? DownComplete : TxAvailable) |
                 (vp->full_bus_master_rx ? UpComplete : RxComplete) |
                 (vp->bus_master ? DMADone : 0);
- vp->intr_enable = SetIntrEnb | IntLatch | TxAvailable | RxComplete |
+ vp->intr_enable = SetIntrEnb | IntLatch | TxAvailable |
+ (vp->full_bus_master_rx ? 0 : RxComplete) |
                 StatsFull | HostError | TxComplete | IntReq
                 | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete;
         outw(vp->status_enable, ioaddr + EL3_CMD);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Apr 07 2000 - 21:00:16 EST