I don't know how many time-out problems exist in via-rhine.c, but the patch below fixes at least one of them. It works for my VT6102 based card. I hope some of you can confirm the fix (or let me know what other chips I broke). Here's the error message the patch addresses: Transmit timed out, status 0000, PHY status 782d, resetting... The patch is slightly experimental and contains some changes and clean-ups that are not directly related to the time out problem. Patch description: - Recover gracefully from TxAbort (the actual fix) - Explicitly pick a backoff algorithm (alternative "fix") - Remove full_duplex, duplex_lock, and advertising from netdev_private - Make use of MII register names somewhat more consistent - Update comment regarding config information at 0x78 - Move comment on *_desc_status where it belongs - More comment details Some information on stalling: The time outs happened because the driver's handling of TxAbort was incomplete: The transfer didn't get restarted. My initial fix was to prevent TxAbort -- clearing bit 1 of ConfigD did the trick for me. The stalling effect was gone. The simple reason: The AMD backoff algorithm always triggered TxAborts, the others didn't. However, once I had the driver recover from TxAbort without waiting for the time out reset, the AMD solution provided over 20% higher throughput than the DEC algorithm. YMMV, depending on the specific setup. I'd vote for a module parameter. For now, I hardcoded AMD: it's what the eeprom picks when reloaded. Also, every other algorithm masked the TxAbort problem (by not triggering any). Incidentally, the VIA drivers clear bits 0-3 and set bit 3 of TxConfig for all chips (the latter supposedly deals with backoff algorithms, too, but it didn't seem to make a measurable difference on my system). Patch is against 2.4.19-pre8. Feedback welcome. Roger