From owner-freebsd-current@FreeBSD.ORG Sun Jan 4 15:02:25 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8D57316A4CE; Sun, 4 Jan 2004 15:02:25 -0800 (PST) Received: from niobe.ijs.si (mail.ijs.si [193.2.4.66]) by mx1.FreeBSD.org (Postfix) with ESMTP id A337243D1F; Sun, 4 Jan 2004 15:02:22 -0800 (PST) (envelope-from dejan.lesjak@ijs.si) Received: from localhost (localhost.ijs.si [127.0.0.1]) by niobe.ijs.si (Postfix) with ESMTP id B092C1DDE08; Mon, 5 Jan 2004 00:02:21 +0100 (CET) Received: from niobe.ijs.si ([193.2.4.66]) by localhost (niobe.ijs.si [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 40834-01; Mon, 5 Jan 2004 00:02:19 +0100 (CET) Received: from rincewind.ijs.si (rincewind.ijs.si [193.2.4.137]) by niobe.ijs.si (Postfix) with ESMTP id 3E9B61DDDF3; Mon, 5 Jan 2004 00:02:19 +0100 (CET) From: Dejan Lesjak To: Don Lewis Date: Mon, 5 Jan 2004 00:02:18 +0100 User-Agent: KMail/1.5.94 References: <200401042151.i04Lp27E009737@gw.catspoiler.org> In-Reply-To: <200401042151.i04Lp27E009737@gw.catspoiler.org> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <200401050002.18767.dejan.lesjak@ijs.si> X-Virus-Scanned: by amavisd-new / Sophos+Sophie at ijs.si cc: ryans@gamersimpact.com cc: silby@silby.com cc: freebsd-current@FreeBSD.org cc: wpaul@FreeBSD.org Subject: Re: 5.2-RC oerrs and collisions on dc0 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 Jan 2004 23:02:25 -0000 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