Re: 5.2-RC oerrs and collisions on dc0

From: Don Lewis <truckman_at_FreeBSD.org>
Date: Sun, 4 Jan 2004 13:51:02 -0800 (PST)
I just took a closer look at the busdma diff, and this change to
dc_txeof() looks very suspicious:

_at__at_ -2663,7 +2809,7 _at__at_
                if (txstat & DC_TXSTAT_OWN)
                        break;
 
-               if (!(cur_tx->dc_ctl & DC_TXCTL_LASTFRAG) ||
+               if (!(cur_tx->dc_ctl & DC_TXCTL_FIRSTFRAG) ||
                    cur_tx->dc_ctl & DC_TXCTL_SETUP) {
                        if (cur_tx->dc_ctl & DC_TXCTL_SETUP) {
                                /*

The code in the "if" block ends with a "continue" which will cause the
error handling code to be skipped if the "if" condition is true.  I'm
pretty sure that the error status bits are only set in the last
descriptor for the frame, so we want to execute the "continue" unless
the DC_TXCTL_LASTFRAG bit is set.

Try reverting this part of the busdma change.
Received on Sun Jan 04 2004 - 12:51:16 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:36 UTC