Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 23 Feb 2002 14:12:18 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Alfred Perlstein <bright@mu.org>
Cc:        John Baldwin <jhb@FreeBSD.org>, Seigo Tanimura <tanimura@FreeBSD.org>, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/coda coda_venus.c src/sys/compat/linprocfs
Message-ID:  <200202232212.g1NMCI041812@apollo.backplane.com>
References:  <200202232030.g1NKU4m87533@freefall.freebsd.org> <20020223204610.GG80761@elvis.mu.org> <200202232056.g1NKuKf41350@apollo.backplane.com> <20020223212005.GK80761@elvis.mu.org>

next in thread | previous in thread | raw e-mail | index | archive | help

:
:I've also asked john to implement a sleephold()/sleepdrop() functionaity.
:
:the premise is this:
:
:As you've noticed there's a bunch of code in sys/kern and sys/vm that
:has comments to the effect of:
:   "this shouldn't block, but i'm not sure"
:
:Well, since for the most part blocking occurs rarely, what you do is
:keep a nested count in the proc struct that records weather or not you
:can sleep.
:
:Basically you have a td->td_sleephold that starts at zero, sleephold()
:will td->td_sleephold++, and sleepdrop() will td->td_sleephold--
:as well as check for < 0.

    I'm fairly sure that the only time we can't block occurs while we are
    holding a leaf mutex.  The MTX_LEAF flag in the thread may be sufficient.
    After all, why else would you not be able to sleep?

:Then for invariants you add to all functions that may block something
:like mightsleep(); at the entrance to the function.  Anyone calling
:into this function with a td->td_sleephold > 0 will trigger an
:assertion and panic.
:
:As far as further assertions, I've brought this up with John and
:he's ok with it, I just haven't had the time to implement it.
:
:I think he'd be ok with deltas but he's heard enough of my ideas
:for invariants, I guess i just need to get my hands dirty with it. :)
:
:-- 
:-Alfred Perlstein [alfred@freebsd.org]

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




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