Skip site navigation (1)Skip section navigation (2)
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>