Skip site navigation (1)Skip section navigation (2)
Date:      23 Jan 2003 12:26:43 +0000
From:      Doug Rabson <dfr@nlsystems.com>
To:        John Baldwin <jhb@FreeBSD.ORG>
Cc:        Andrew Gallatin <gallatin@cs.duke.edu>, arch@FreeBSD.ORG
Subject:   Re: M_ flags summary.
Message-ID:  <1043324803.28337.40.camel@builder02.qubesoft.com>
In-Reply-To: <XFMail.20030122165805.jhb@FreeBSD.org>
References:  <XFMail.20030122165805.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2003-01-22 at 21:58, John Baldwin wrote:
> On 22-Jan-2003 Andrew Gallatin wrote:
> > 
> > 
> > Speaking as the token 3rd party driver vendor, the removal of
> > M_WAITOK/M_TRYWAIT is irritating, but not something that can't be
> > solved with yet another ifdef in my driver.  Breaking the 5.0 ABI
> > prior to 5.1 is no big deal to me, as I don't plan to support
> > 5.0-RELEASE anyway, so I don't care what the #defines end up as in the
> > 5.0-STABLE branch.
> > 
> > My thoughts are that whether we pronounce it po-ta-to, or po-tat-o,
> > its still a potato and how its pronounced doesn't matter nearly as
> > much as how it tastes.  
> > 
> > The taste "problem" here is that it always used to be safe to sleep
> > in a process context.  That's not true anymore.  Now its safe to
> > sleep in a process context if you're not holding any mutexes.  So
> > there are pleny of sleepable allocation bugs lurking.
> > 
> > If we want to catch sleepable allocation bugs right up front, I
> > suggest we put this:
> > 
> > if (!(flags & M_NOWAIT)) {
> >    WITNESS_SLEEP(1, NULL);
> > }
> > 
> > at the top of malloc, and at the top of all entry points to the mbuf
> > allocator.  Eg, before the system has a chance to pull the allocation 
> > off of some cache which will succeed 99.5% of the time, except when
> > the system is under memory pressure.
> 
> We already do this for malloc(), that is the source of most of the
> 'could sleep' messages these days.  I have some patches I need to
> commit to make the actual message more informative so that it will
> say 'could malloc' etc.

I was thinking yesterday that perhaps it would be useful to have a new
entry point to the allocator. This might be called mmalloc, with the
idea that mmalloc is to malloc as msleep is to tsleep. The caller would
call it with its currently held mutex as an argument and that mutex
would filter all the way down to the place where malloc sleeps and be
passed to msleep (or something).

This makes it explicit for the caller what is happening, i.e. it is
clear that as a side effect of calling the allocator, your mutex may be
released and regained so you need to take care about any cached results
depending on variables which might be modified by other threads.



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




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