With a tigon3 5701, 2.4.21 kernel, we are getting persistent tg3_stop_block timed out, ofs=* enable_bit=2 messages, with ofs=3400, 2400, 1400, c00. drivers/net/tg3.c: /* To stop a block, clear the enable bit and poll till it * clears. tp->lock is held. */ static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit) { unsigned int i; u32 val; val = tr32(ofs); val &= ~enable_bit; tw32(ofs, val); tr32(ofs); <=== why? for (i = 0; i < MAX_WAIT_CNT; i++) { udelay(100); val = tr32(ofs); if ((val & enable_bit) == 0) break; } if (i == MAX_WAIT_CNT) { printk(KERN_ERR PFX "tg3_stop_block timed out, " "ofs=%lx enable_bit=%x\n", ofs, enable_bit); return -ENODEV; } return 0; } Why does the code read tr32(ofs) twice and only test after the second read? Is there any possibility of a race here? tw32(ofs, val); /* clear bit1 */ tr32(ofs); /* bit1 reads 0 */ for (i = 0; i < MAX_WAIT_CNT; i++) { udelay(100); val = tr32(ofs); /* bit1 reset to 1 */ IOW, bit1 went 1 -> 0 -> 1 but because we only test the second and subsequent read, it appears that bit1 is locked on. - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html