Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Nov 2004 01:29:55 -0500
From:      David Schultz <das@FreeBSD.ORG>
To:        John Baldwin <jhb@FreeBSD.ORG>
Cc:        cvs-all@FreeBSD.ORG
Subject:   Re: cvs commit: src/sys/vm vm_zeroidle.c
Message-ID:  <20041106062955.GA1986@VARK.MIT.EDU>
In-Reply-To: <200411011441.33067.jhb@FreeBSD.org>
References:  <200410311932.i9VJWvmo058193@repoman.freebsd.org> <20041101045331.GP16728@cs.rice.edu> <20041101105113.GS24892@elvis.mu.org> <200411011441.33067.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Nov 01, 2004, John Baldwin wrote:
> On Monday 01 November 2004 05:51 am, Alfred Perlstein wrote:
> > * Alan Cox <alc@cs.rice.edu> [041031 20:53] wrote:
> > > On Sun, Oct 31, 2004 at 07:13:17PM -0800, Alfred Perlstein wrote:
> > > > * Alan Cox <alc@FreeBSD.org> [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?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041106062955.GA1986>