cvs commit: src/sys/pci if_dc.c if_dcreg.h

Don Lewis truckman at FreeBSD.org
Wed Jan 7 22:25:42 PST 2004


On  7 Jan, To: src-committers at FreeBSD.org wrote:
> truckman    2004/01/07 22:22:15 PST
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/pci              if_dc.c if_dcreg.h 
>   Log:
>   The transmit frame status is stored in the last transmit descriptor for the
>   frame, not the first.  It is probably also not safe to free the mbuf chain
>   as soon as the OWN bit is cleared on the first descriptor since the chip
>   may not be done copying the frame into the transmit FIFO.  Revert the part of
>   of busdma conversion (if_dc.c rev 1.115) which changed dc_txeof() to look for
>   the status in the first descriptor and free the mbuf chain when processing
>   the first descriptor for the frame, and revert the matching changes elsewhere
>   in the driver.  This part of the busdma change caused the driver to report
>   spurious collisions and output errors, even when running in full-duplex mode.
>   Reverting the mbuf chain handling slightly complicates dc_dma_map_txbuf(),
>   since it is responsible for setting the OWN bits on the descriptors, but does
>   not normally have direct access to the mbuf chain.
>   
>   Tested by:
>     Dejan Lesjak <dejan.lesjak at ijs.si>  alpha/<Intel 21143 10/100BaseTX>
>     "Xin LI" <delphij at frontfree.net>    i386/<Macronix 98713 10/100BaseTX>
>     Wiktor Niesiobedzki <bsd at w.evip.pl> i386/<3Com OfficeConnect 10/100B>
>   
>   Reviewed by:    mux
>   
>   Revision  Changes    Path
>   1.138     +4 -3      src/sys/pci/if_dc.c
>   1.41      +1 -0      src/sys/pci/if_dcreg.h

This may be a good candidate for 5.2.  I've gotten expressions of
interest in having this fixed for the release.



More information about the cvs-all mailing list