Date: Wed, 20 Dec 2006 11:39:41 -0500 From: Scott Long <scottl@samsco.org> To: Bruce Evans <bde@FreeBSD.org> Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/dev/bge if_bge.c Message-ID: <4589674D.6010408@samsco.org> In-Reply-To: <200612201203.kBKC3MhO053666@repoman.freebsd.org> References: <200612201203.kBKC3MhO053666@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Bruce Evans wrote: > bde 2006-12-20 12:03:21 UTC > > FreeBSD src repository > > Modified files: > sys/dev/bge if_bge.c > Log: > In bge_txeof(), cancel the watchdog timeout if all descriptors have > been handled instead of when at least one descriptor was just handled. > For bge, it is normal to get a txeof when only a small fraction of the > queued tx descriptors have been handled, so the bug broke the watchdog > in a usual case. > > Revision Changes Path > 1.170 +2 -1 src/sys/dev/bge/if_bge.c As Gleb points out, what you've changed this to has a failure case too, though maybe it's not as common as the one that you might have been seeing. The whole countdown/reset scheme is basically insufficient. What is needed is something like if_em, where the rings pointers are actually checked for progress. It's simple and cheap to do, and it addresses the actual issue of detecting when the chip has stopped processing packets. Scott
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4589674D.6010408>