Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Jan 2004 13:51:02 -0800 (PST)
From:      Don Lewis <truckman@FreeBSD.org>
To:        dejan.lesjak@ijs.si
Cc:        wpaul@FreeBSD.org
Subject:   Re: 5.2-RC oerrs and collisions on dc0
Message-ID:  <200401042151.i04Lp27E009737@gw.catspoiler.org>
In-Reply-To: <200401041115.29188.dejan.lesjak@ijs.si>

next in thread | previous in thread | raw e-mail | index | archive | help
I just took a closer look at the busdma diff, and this change to
dc_txeof() looks very suspicious:

@@ -2663,7 +2809,7 @@
                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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200401042151.i04Lp27E009737>