Date: Wed, 20 Dec 2006 16:26:32 +0300 From: Gleb Smirnoff <glebius@FreeBSD.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: <20061220132631.GH34400@FreeBSD.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
On Wed, Dec 20, 2006 at 12:03:21PM +0000, Bruce Evans wrote: B> bde 2006-12-20 12:03:21 UTC B> B> FreeBSD src repository B> B> Modified files: B> sys/dev/bge if_bge.c B> Log: B> In bge_txeof(), cancel the watchdog timeout if all descriptors have B> been handled instead of when at least one descriptor was just handled. B> For bge, it is normal to get a txeof when only a small fraction of the B> queued tx descriptors have been handled, so the bug broke the watchdog B> in a usual case. I have a suspicion that this may cause a problem under high load. Imagine that thread #1 is spinning in bge_start_locked() getting packets out of interface queue and putting them into TX ring. Some other threads are putting the packets into interface queue while its lock is temporarily relinguished be the thread #1. In the same time interrupts happen, some packets are sent, but the TX ring is never got empty. The above scenario will cause a fake watchdog event. -- Totus tuus, Glebius. GLEBIUS-RIPN GLEB-RIPE
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061220132631.GH34400>