Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Nov 2002 03:54:40 -0800 (PST)
From:      Matthew Jacob <mjacob@feral.com>
To:        Jake Burkholder <jake@locore.ca>
Cc:        "Alan L. Cox" <alc@imimic.com>, jeff@FreeBSD.org, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/vm uma_dbg.c
Message-ID:  <Pine.BSF.4.21.0211110354320.67049-100000@beppo>
In-Reply-To: <Pine.BSF.4.21.0211102058500.64258-100000@beppo>

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

Seems to work. Checked in. I'm outta here.


On Sun, 10 Nov 2002, Matthew Jacob wrote:

> > 
> > This would be my suggestion:
> > 
> > Index: sys/vm/uma_core.c
> > ===================================================================
> > RCS file: /home/ncvs/src/sys/vm/uma_core.c,v
> > retrieving revision 1.41
> > diff -u -r1.41 uma_core.c
> > --- sys/vm/uma_core.c	1 Nov 2002 01:01:27 -0000	1.41
> > +++ sys/vm/uma_core.c	11 Nov 2002 04:11:38 -0000
> > @@ -1348,7 +1348,9 @@
> >  			    ("uma_zalloc: Bucket pointer mangled."));
> >  			cache->uc_allocs++;
> >  #ifdef INVARIANTS
> > +			ZONE_LOCK(zone);
> >  			uma_dbg_alloc(zone, NULL, item);
> > +			ZONE_UNLOCK(zone);
> >  #endif
> >  			CPU_UNLOCK(zone, cpu);
> >  			if (zone->uz_ctor)
> > @@ -1698,10 +1700,12 @@
> >  			    ("uma_zfree: Freeing to non free bucket index."));
> >  			bucket->ub_bucket[bucket->ub_ptr] = item;
> >  #ifdef INVARIANTS
> > +			ZONE_LOCK(zone);
> >  			if (zone->uz_flags & UMA_ZFLAG_MALLOC)
> >  				uma_dbg_free(zone, udata, item);
> >  			else
> >  				uma_dbg_free(zone, NULL, item);
> > +			ZONE_UNLOCK(zone);
> >  #endif
> >  			CPU_UNLOCK(zone, cpu);
> >  			return;
> > 
> > uma_dbg_* are called with the zone lock held everywhere else, and the
> > us_freelist is used with the zone lock held everywhere else as well.
> > slab_zalloc is working on a newly created slab that doesn't have any
> > other references, so it doesn't need to be locked until its added to
> > the zone.
> > 
> 
> And that'd be a no:
> 
> Mounting root from ufs:/dev/da2a
> recursed on non-recursive lock (sleep mutex) NAMEI @
> ../../../vm/uma_dbg.c:202
> first acquired @ ../../../vm/uma_core.c:1351
> panic: recurse
> cpuid = 2; 
> panic
> Stopped at      Debugger+0x34:  zapnot  v0,#0xf,v0      <v0=0x0>
> db> t
> Debugger() at Debugger+0x34
> panic() at panic+0x1a4
> witness_lock() at witness_lock+0x3fc
> _mtx_lock_flags() at _mtx_lock_flags+0xc4
> uma_dbg_getslab() at uma_dbg_getslab+0xe4
> uma_dbg_alloc() at uma_dbg_alloc+0x30
> uma_zalloc_arg() at uma_zalloc_arg+0x130
> namei() at namei+0xa4
> kern_mkdir() at kern_mkdir+0x70
> start_init() at start_init+0x1a0
> fork_exit() at fork_exit+0xe0
> exception_return() at exception_return
> --- root of call graph ---
> 
> 
> I guess getting rid of the ZONE_LOCK in uma_dbg_getslab is also needed
> :-)
> 
> 
> 


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?Pine.BSF.4.21.0211110354320.67049-100000>