From owner-cvs-all@FreeBSD.ORG Mon Nov 8 18:18:18 2004 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2B07B16A4FB for ; Mon, 8 Nov 2004 18:18:17 +0000 (GMT) Received: from mail6.speakeasy.net (mail6.speakeasy.net [216.254.0.206]) by mx1.FreeBSD.org (Postfix) with ESMTP id A9D1A43D4C for ; Mon, 8 Nov 2004 18:18:14 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: (qmail 18563 invoked from network); 8 Nov 2004 18:18:14 -0000 Received: from dsl027-160-063.atl1.dsl.speakeasy.net (HELO server.baldwin.cx) ([216.27.160.63]) (envelope-sender ) encrypted SMTP for ; 8 Nov 2004 18:18:14 -0000 Received: from [10.50.41.235] (gw1.twc.weather.com [216.133.140.1]) (authenticated bits=0) by server.baldwin.cx (8.12.11/8.12.11) with ESMTP id iA8II4Ht019426; Mon, 8 Nov 2004 13:18:10 -0500 (EST) (envelope-from jhb@FreeBSD.org) From: John Baldwin To: David Schultz Date: Mon, 8 Nov 2004 13:11:42 -0500 User-Agent: KMail/1.6.2 References: <200410311932.i9VJWvmo058193@repoman.freebsd.org> <200411011441.33067.jhb@FreeBSD.org> <20041106062955.GA1986@VARK.MIT.EDU> In-Reply-To: <20041106062955.GA1986@VARK.MIT.EDU> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <200411081311.42201.jhb@FreeBSD.org> X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on server.baldwin.cx cc: Alan Cox cc: cvs-src@FreeBSD.org cc: Alfred Perlstein cc: cvs-all@FreeBSD.org cc: src-committers@FreeBSD.org Subject: Re: cvs commit: src/sys/vm vm_zeroidle.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Nov 2004 18:18:18 -0000 On Saturday 06 November 2004 01:29 am, David Schultz wrote: > On Mon, Nov 01, 2004, John Baldwin wrote: > > On Monday 01 November 2004 05:51 am, Alfred Perlstein wrote: > > > * Alan Cox [041031 20:53] wrote: > > > > On Sun, Oct 31, 2004 at 07:13:17PM -0800, Alfred Perlstein wrote: > > > > > * Alan Cox [041031 11:33] wrote: > > > > > > alc 2004-10-31 19:32:57 UTC > > > > > > > > > > > > FreeBSD src repository > > > > > > > > > > > > Modified files: > > > > > > sys/vm vm_zeroidle.c > > > > > > Log: > > > > > > Introduce a Boolean variable wakeup_needed to avoid repeated, > > > > > > unnecessary calls to wakeup() by vm_page_zero_idle_wakeup(). > > > > > > > > > > > > Revision Changes Path > > > > > > 1.31 +9 -2 src/sys/vm/vm_zeroidle.c > > > > > > > > > > Why not switch to a cv? > > > > > > > > Calling cv_signal repeatedly would be no better than calling wakeup() > > > > repeatedly. Either way, a Boolean variable is desirable to prevent > > > > unnecessary calls. > > > > > > Yah, I figured there would be something in the cv code to optimize > > > the "no waiters" case. > > > > There is, though sometimes it might think there are waiters when there > > actually aren't any. > > It doesn't look very optimized: > > void > cv_signal(struct cv *cvp) > { > > sleepq_lock(cvp); > ^^^^^^^^^^^^^^^^^ > if (cvp->cv_waiters > 0) { > [...] > } else > sleepq_release(cvp); > > The mutex associated with the condition variable will be held on > entry to both cv_wait() and cv_signal(), so why is the sleepqueue > locked in the no waiters case? It is no longer required to hold the mutex over cv_wait() and cv_signal(). I intentionally changed that so that you can do: lock() blah() unlock() cv_signal() and reduce the number of context switches if you preempt in cv_signal(). -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org