From owner-freebsd-current Wed May 29 0:24:23 2002 Delivered-To: freebsd-current@freebsd.org Received: from evilpete.dyndns.org (12-232-26-46.client.attbi.com [12.232.26.46]) by hub.freebsd.org (Postfix) with ESMTP id 11A4337B400 for ; Wed, 29 May 2002 00:24:14 -0700 (PDT) Received: from overcee.wemm.org ([10.0.0.3]) by evilpete.dyndns.org (8.11.6/8.11.6) with ESMTP id g4T7OD162806 for ; Wed, 29 May 2002 00:24:13 -0700 (PDT) (envelope-from peter@wemm.org) Received: from wemm.org (localhost [127.0.0.1]) by overcee.wemm.org (Postfix) with ESMTP id 6FDD5380A; Wed, 29 May 2002 00:24:13 -0700 (PDT) (envelope-from peter@wemm.org) X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 To: Terry Lambert Cc: Poul-Henning Kamp , Richard Wenninger , current@FreeBSD.org Subject: Re: UMA lock In-Reply-To: <3CF476E7.D465D5C3@mindspring.com> Date: Wed, 29 May 2002 00:24:13 -0700 From: Peter Wemm Message-Id: <20020529072413.6FDD5380A@overcee.wemm.org> Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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