Date: Wed, 29 May 2002 00:24:13 -0700 From: Peter Wemm <peter@wemm.org> To: Terry Lambert <tlambert2@mindspring.com> Cc: Poul-Henning Kamp <phk@critter.freebsd.dk>, Richard Wenninger <richard@richardw.net>, current@FreeBSD.org Subject: Re: UMA lock Message-ID: <20020529072413.6FDD5380A@overcee.wemm.org> In-Reply-To: <3CF476E7.D465D5C3@mindspring.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Terry Lambert wrote:
> Poul-Henning Kamp wrote:
> > In message <20020529061540.88CD6380A@overcee.wemm.org>, Peter Wemm writes:
> > >As you said, _sleeping_ is the problem. M_WAITOK means "you may sleep if
> > >you like". ie: it is a time bomb waiting for the right low memory condit
ion
> > >which will then explode with a 100% authentic crash or lock up.
> > >
> > >Pretend it said M_SLEEPOK instead of M_WAITOK.
> >
> > Uhm, I'm actually seeing the opposite behaviour as well: after I
> > changed the md(4) driver to use M_NOWAIT I still see malloc/zalloc
> > sleeping...
>
> I'm with Poul on this one, Peter: M_WAITOK doesn't mean what
> you think it means: it's doesn't mean tsleep may be called,
> and M_NOWAIT doesn't mean tsleep() _won't_ be called, in
> practice.
No, it is exactly what it means, eg:
if (!(flags & M_NOWAIT))
KASSERT(curthread->td_intr_nesting_level == 0,
("malloc(M_WAITOK) in interrupt context"));
tsleep() in interrupt context is the kiss-of-death. M_NOWAIT means
"you must not call tsleep!", which is what I have been saying all along.
There is a known bug in UMA where it recurses and calls itself with with
M_WAITOK even if it was explicitly called with M_NOWAIT set. The bug is
real and would cause a panic if we actually ran low on memory at that
point.
Cheers,
-Peter
--
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020529072413.6FDD5380A>
