Fast Ethernet Stalls with NetGear FA310TX Rev.D1
Tom Crockett
tom@icase.edu
Wed Apr 7 13:21:11 1999
> This problem seems very similar to the one we were getting with SMC Etherpower
> || cards. We solved this by putting in a usleep(1) in the *_start_xmit()
> function just before the transmitt demand is triggered.
>
> tp->tx_ring[entry].length = skb->len | flag;
> tp->tx_ring[entry].status = 0x80000000; /* Pass ownership to the chip. */
> tp->cur_tx++;
>
> usleep(1);
>
> /* Trigger an immediate transmit demand. */
> outl(0, dev->base_addr + CSR1);
>
> dev->trans_start = jiffies;
>
> Although this is a different chipset, it may be worth a try.
Terry,
Thanks for the suggestion. We had to go with a 2 microsecond delay to
eliminate stalls on our system, but that did the trick. We're using the
Pentium's time-stamp counter for fine-grained timing, and found that
anything less than 2 microseconds still produced occasional stalls.
We're not entirely happy about introducing that much idle time into the
already-expensive communication stack, so now we're trying to figure out
why the delay is necessary and whether some less expensive approach
might be equally effective. If anyone can shed light on this, we'd love
to hear from you. Our current thinking is that it somehow relates to
memory-management and cacheing, but other scenarios might be possible.
-Tom
--
Tom Crockett
ICASE
Institute for Computer Applications in Science and Engineering
M.S. 132C email: tom@icase.edu
NASA Langley Research Center phone: (757) 864-2182
Hampton, VA 23681-2199 fax: (757) 864-6134
Home Page: http://www.icase.edu/~tom/