Date: Sun, 05 Apr 2015 15:07:56 -0500 From: Alan Cox <alc@rice.edu> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: alc@FreeBSD.org, current@freebsd.org Subject: Re: panic: Lock vm object not exclusively locked @ /usr/src/sys/vm/vm_page.c:2637 Message-ID: <5521961C.8010808@rice.edu> In-Reply-To: <20150405193425.GR64665@glebius.int.ru> References: <20150405133758.GA40261@albert.catwhisker.org> <20150405154721.GO64665@FreeBSD.org> <5521749C.4020408@rice.edu> <20150405193425.GR64665@glebius.int.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On 04/05/2015 14:34, Gleb Smirnoff wrote: > On Sun, Apr 05, 2015 at 12:45:00PM -0500, Alan Cox wrote: > A> On 04/05/2015 10:47, Gleb Smirnoff wrote: > A> > On Sun, Apr 05, 2015 at 06:37:58AM -0700, David Wolfskill wrote: > A> > D> It ocurred rather late in the transition to multi-user mode, bu= t > A> > D> prior to starting xdm (on my laptop). > A> > D>=20 > A> > D> Previous (working) head/i386 for this machine was r281074. > A> > D>=20 > A> > D> Here's the first bit of the crashinfo (yes, I have a crash dump= ): > A> > D>=20 > A> > D> g1-254.catwhisker.org dumped core - see /var/crash/vmcore.3 > A> > D>=20 > A> > D> Sun Apr 5 06:18:44 PDT 2015 > A> > D>=20 > A> > D> FreeBSD g1-254.catwhisker.org 11.0-CURRENT FreeBSD 11.0-CURRENT= #1561 r281106M/281106:1100067: Sun Apr 5 06:01:06 PDT 2015 root@g1= -254.catwhisker.org:/common/S4/obj/usr/src/sys/CANARY i386 > A> > D>=20 > A> > D> panic: Lock vm object not exclusively locked @ /usr/src/sys/vm/= vm_page.c:2637 > A> > > A> > This is r281079. > A> > > A> > Since vm_page_advise() may call vm_page_dirty() in the MADV_DONTNE= ED case, > A> > the assertion is valid. So, looks like vm_fault_dontneed() needs W= -lock on > A> > the first_object. > A> > > A>=20 > A> Actually, what I forgot was that vm_page_advise(MADV_FREE) clears th= e > A> page's dirty field, and that is why an exclusive lock is asserted. = As > A> explained in vm_page.h, the pmap is allowed to set the dirty field t= o > A> all ones without any locking. Moreover, the new "fast" path in > A> vm_fault() sets the dirty field with only a read lock held.=20 > A> vm_page_advise(MADV_DONTNEED) isn't really any different from the fa= st path. > A>=20 > A> Need to think a bit ... > > Can you please plug the panic somehow interim? For me the assert fires = 100% > reliably on any build attempt. Right now I changed vm_fault_dontneed() = to > take W-lock, so that I can continue running head. Not sure this is corr= ect > measure. > Just curious, amd64 or i386?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5521961C.8010808>