Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 May 2002 21:02:37 +0300
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        Peter Wemm <peter@wemm.org>
Cc:        Terry Lambert <tlambert2@mindspring.com>, Poul-Henning Kamp <phk@critter.freebsd.dk>, Richard Wenninger <richard@richardw.net>, current@freebsd.org
Subject:   Re: UMA lock
Message-ID:  <20020529180236.GA30172@hades.hell.gr>
In-Reply-To: <20020529072413.6FDD5380A@overcee.wemm.org>
References:  <3CF476E7.D465D5C3@mindspring.com> <20020529072413.6FDD5380A@overcee.wemm.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2002-05-29 00:24 -0700, Peter Wemm wrote:
> 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.

Just in case anyone more knowledgeable than me knows that to do about
this, here's something that seems to look like this.

A trace that I got when I ran my kernel with WITNESS for a day or so,
was the following.  Note the lines marked with an asterisk that
clearly show (unless I am terribly wrong) that UMA is entered twice,
and the WITNESS check fails the second time.

	Debugger("witness_sleep")
	Stopped at      Debugger+0x45:  xchgl   %ebx,in_Debugger.0
	db> trace
	Debugger(c02d6500) at Debugger+0x45
	witness_sleep(1,0,c02eb711,52c) at witness_sleep+0xf8
*	uma_zalloc_arg(c082a640,0,0) at uma_zalloc_arg+0x3e
	vm_map_entry_create(c0822000,c5b55150,c69a2000,c0822000,c6424bd4) at
	vm_map_entry_create+0x2b
	_vm_map_clip_end(c0822000,c5b55150,c69a4000) at _vm_map_clip_end+0x4b
	vm_map_delete(c0822000,c69a2000,c69a4000,c69a2000,4) at
	vm_map_delete+0x94
	vm_map_remove(c0822000,c69a2000,c69a4000,c0321140,1) at
	vm_map_remove+0x5b
	kmem_free(c0822000,c69a2000,2000,c6424c60,c02818a0) at kmem_free+0x3c
	page_free(c69a2000,2000,4) at page_free+0x44
	zone_drain(c24f3780) at zone_drain+0x302
	zone_foreach(c028159e,c6424d0c,c027f22c,c0321140,1) at
	zone_foreach+0x2e
*	uma_reclaim(c0321140,1,c02eb4c2,286,c0321140) at uma_reclaim+0x12
	vm_pageout_scan(0,c027fcaa,c6424d34,c01a0eaa,0) at
	vm_pageout_scan+0x30
	vm_pageout(0,c6424d48,c6380a3c,c027fcaa,0) at vm_pageout+0x22d
	fork_exit(c027fcaa,0,c6424d48) at fork_exit+0x88
	fork_trampoline() at fork_trampoline+0x37
	db> c

-- 
Giorgos Keramidas    | FreeBSD: The Power to Serve
keramida@FreeBSD.org | http://www.FreeBSD.org

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?20020529180236.GA30172>