diff options
author | Andrew Morton <akpm@osdl.org> | 2006-03-31 05:30:47 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-31 15:18:55 -0500 |
commit | 0000754c27f07d5656eff17367c05dc4cfb7d965 (patch) | |
tree | fb96aa5860e9d29ef68cfb4d103737d9877fcd40 | |
parent | 88b9adb073b7a69a54b1b14423103bc24587ebdc (diff) |
[PATCH] "3c59x collision statistics fix" fix
The pre-2.6.16 patch "3c59x collision statistics fix" accidentally caused
vortex_error() to not run iowrite16(TxEnable, ioaddr + EL3_CMD) if we got a
maxCollisions interrupt but MAX_COLLISION_RESET is not set.
Thanks to Pete Clements <clem@clem.clem-digital.net> for reporting and testing.
Acked-by: Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/net/3c59x.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 70f63891b19c..51129079853b 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c | |||
@@ -2083,16 +2083,14 @@ vortex_error(struct net_device *dev, int status) | |||
2083 | } | 2083 | } |
2084 | if (tx_status & 0x14) vp->stats.tx_fifo_errors++; | 2084 | if (tx_status & 0x14) vp->stats.tx_fifo_errors++; |
2085 | if (tx_status & 0x38) vp->stats.tx_aborted_errors++; | 2085 | if (tx_status & 0x38) vp->stats.tx_aborted_errors++; |
2086 | if (tx_status & 0x08) vp->xstats.tx_max_collisions++; | ||
2086 | iowrite8(0, ioaddr + TxStatus); | 2087 | iowrite8(0, ioaddr + TxStatus); |
2087 | if (tx_status & 0x30) { /* txJabber or txUnderrun */ | 2088 | if (tx_status & 0x30) { /* txJabber or txUnderrun */ |
2088 | do_tx_reset = 1; | 2089 | do_tx_reset = 1; |
2089 | } else if (tx_status & 0x08) { /* maxCollisions */ | 2090 | } else if ((tx_status & 0x08) && (vp->drv_flags & MAX_COLLISION_RESET)) { /* maxCollisions */ |
2090 | vp->xstats.tx_max_collisions++; | 2091 | do_tx_reset = 1; |
2091 | if (vp->drv_flags & MAX_COLLISION_RESET) { | 2092 | reset_mask = 0x0108; /* Reset interface logic, but not download logic */ |
2092 | do_tx_reset = 1; | 2093 | } else { /* Merely re-enable the transmitter. */ |
2093 | reset_mask = 0x0108; /* Reset interface logic, but not download logic */ | ||
2094 | } | ||
2095 | } else { /* Merely re-enable the transmitter. */ | ||
2096 | iowrite16(TxEnable, ioaddr + EL3_CMD); | 2094 | iowrite16(TxEnable, ioaddr + EL3_CMD); |
2097 | } | 2095 | } |
2098 | } | 2096 | } |