[PATCH] pcnet32: Prevent hang with 79c976
authorDon Fry <brazilnut@us.ibm.com>
Tue, 1 Nov 2005 21:13:35 +0000 (13:13 -0800)
committerJeff Garzik <jgarzik@pobox.com>
Sat, 5 Nov 2005 19:40:55 +0000 (14:40 -0500)
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>
drivers/net/pcnet32.c

index 549a07385884ddb093406a1af4bf0b0580aa03dd..be319229f5436be46642fb782ebfc7b056f22675 100644 (file)
@@ -988,7 +988,11 @@ static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs,
     *buff++ = a->read_csr(ioaddr, 114);
 
     /* read bus configuration registers */
-    for (i=0; i<36; i++) {
+    for (i=0; i<30; i++) {
+       *buff++ = a->read_bcr(ioaddr, i);
+    }
+    *buff++ = 0;       /* skip bcr30 so as not to hang 79C976 */
+    for (i=31; i<36; i++) {
        *buff++ = a->read_bcr(ioaddr, i);
     }