Please consider pulling from branch 'for-jeff' at git://electric-eye.fr.zoreil.com/home/romieu/linux-2.6.git to retrieve the patch below:
diff-tree 2371408c021f961b92fd2c42480cfddc9c6254f0 (from 3ee68c4af3fd7228c1be63254b9f884614f9ebb2) Author: Francois Romieu <[EMAIL PROTECTED]> Date: Sun Jan 29 00:49:09 2006 +0100 r8169: prevent excessive busy-waiting The MII registers read/write function blindly busy waits for an amount of 1000 us (1 ms), then up to 200 ms. These functions are called from irq disabled context. Depending on the clock management, it triggers lost ticks events. Since the value is way above the standard delay required for mii register access, it strangely looks like a bandaid against posted writes. Fixes http://bugzilla.kernel.org/show_bug.cgi?id=5947 Signed-off-by: Francois Romieu <[EMAIL PROTECTED]> diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 2e1bed1..a81338b 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -484,13 +484,12 @@ static void mdio_write(void __iomem *ioa int i; RTL_W32(PHYAR, 0x80000000 | (RegAddr & 0xFF) << 16 | value); - udelay(1000); - for (i = 2000; i > 0; i--) { + for (i = 20; i > 0; i--) { /* Check if the RTL8169 has completed writing to the specified MII register */ if (!(RTL_R32(PHYAR) & 0x80000000)) break; - udelay(100); + udelay(25); } } @@ -499,15 +498,14 @@ static int mdio_read(void __iomem *ioadd int i, value = -1; RTL_W32(PHYAR, 0x0 | (RegAddr & 0xFF) << 16); - udelay(1000); - for (i = 2000; i > 0; i--) { + for (i = 20; i > 0; i--) { /* Check if the RTL8169 has completed retrieving data from the specified MII register */ if (RTL_R32(PHYAR) & 0x80000000) { value = (int) (RTL_R32(PHYAR) & 0xFFFF); break; } - udelay(100); + udelay(25); } return value; } - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html