Date: Mon, 5 Jan 2004 00:02:18 +0100 From: Dejan Lesjak <dejan.lesjak@ijs.si> To: Don Lewis <truckman@FreeBSD.org> Cc: wpaul@FreeBSD.org Subject: Re: 5.2-RC oerrs and collisions on dc0 Message-ID: <200401050002.18767.dejan.lesjak@ijs.si> In-Reply-To: <200401042151.i04Lp27E009737@gw.catspoiler.org> References: <200401042151.i04Lp27E009737@gw.catspoiler.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 04 of January 2004 22:51, Don Lewis wrote: > 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. I tried this; although I'm now getting watchdog timeouts, I don't see any collisions and the few output errors probably come from timeouts. So I guess this is in the right direction. Could it be that we still need to do these lines: sc->dc_cdata.dc_tx_cnt--; DC_INC(idx, DC_TX_LIST_CNT); unless DC_TXCTL_FIRSTFRAG is set? I'll try playing with this now and see how it goes... Dejan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200401050002.18767.dejan.lesjak>