From: Don Fry Date: Tue, 1 Nov 2005 21:13:35 +0000 (-0800) Subject: [PATCH] pcnet32: Prevent hang with 79c976 X-Git-Tag: v2.6.15-rc1~721^2~1 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4371dc6c60705815dcfe0c2979f68a26d0b27bd4;p=linux-2.6 [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 Signed-off-by: Jeff Garzik --- diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index 549a073858..be319229f5 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, *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); }