aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDon Fry <brazilnut@us.ibm.com>2005-11-01 16:13:35 -0500
committerJeff Garzik <jgarzik@pobox.com>2005-11-05 14:40:55 -0500
commit4371dc6c60705815dcfe0c2979f68a26d0b27bd4 (patch)
tree75a5ca9f987603b20b05fb718324e5edd7165a3e
parent2964bbd7048ac0c1405cc119604e29987dd165df (diff)
[PATCH] pcnet32: Prevent hang with 79c976
Some boards using the 79c976 pcnet32 chip will hang the system if the ethtool --register-dump is performed with the device operational. The request to read bcr30 is retried by the PCI device infinitely without returning data, hanging the system. Tested ia32 and ppc64. Signed-off-by: Don Fry <brazilnut@us.ibm.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
-rw-r--r--drivers/net/pcnet32.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c
index 549a07385884..be319229f543 100644
--- a/drivers/net/pcnet32.c
+++ b/drivers/net/pcnet32.c
@@ -988,7 +988,11 @@ static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs,
988 *buff++ = a->read_csr(ioaddr, 114); 988 *buff++ = a->read_csr(ioaddr, 114);
989 989
990 /* read bus configuration registers */ 990 /* read bus configuration registers */
991 for (i=0; i<36; i++) { 991 for (i=0; i<30; i++) {
992 *buff++ = a->read_bcr(ioaddr, i);
993 }
994 *buff++ = 0; /* skip bcr30 so as not to hang 79C976 */
995 for (i=31; i<36; i++) {
992 *buff++ = a->read_bcr(ioaddr, i); 996 *buff++ = a->read_bcr(ioaddr, i);
993 } 997 }
994 998