fxp: stalled transfers

Bjoern Koenig bkoenig at alpha-tierchen.de
Wed Apr 8 22:20:55 UTC 2009


after upgrading my system from 7.1-RELEASE to recent RELENG_7 I noticed
stalled network transfers in certain cases. I have an Intel PRO/100
ethernet adapter (card=0x00408086 chip=0x12298086 rev=0x0c). In general
networking works fine. I can ping hosts, surf on websites and so on. But
if I send large files (>1 MB) to my server the transfer stalls after a few
kilobytes. This concerns FTP and SCP likewise. While trying to find a
reason for this problem I did a binary search on the source tree using a
generic kernel configuration and found out that the following commit is
responsible for this:

SVN rev 188374 on 2009-02-09 03:48:49Z by yongari

MFC r185330:
  Implement TSO for 82550/82551 controllers.
   o Configure controller to use dynamic TBD as TSO requires that
     operation mode.
   o Add a dummy TBD to tx_cb_u as TSO can access one more TBD in TSO
   o Increase a DMA segment size to 4096 to hold a full IP segment
     with link layer header.
   o Unlike other TSO capable controllers, 82550/82551 does not
     modify the first IP packet in TSO operation so driver should
     create an IP packet with proper header. Subsequent IP packets
     are generated from the header information in the first IP packet
     header. Likewise pseudo checksum also should be computed by
     driver for the first packet.
   o TSO requires one more TBD to hold total TCP payload. To make
     code simple for TSO/non-TSO case, increase the index of the
     first available TBD array.
   o Remove KASSERT that checks the size of a DMA segment should be
     less than or equal to MCLBYTES as it's no longer valid in TSO.
   o Tx threshold and number of TBDs field is used to store MSS in
     TSO. So don't set the Tx threshold in TSO case.

I didn't look further on this commit for now. Please review it. Probably
someone of you can give me a hint.


More information about the freebsd-stable mailing list