Marc Recht wrote:
> 
> Hi!
> 
> After cvsup I got this:
> 
> kernel: recursed on non-recursive lock (sleep mutex) vm page queue mutex @
> ../../../i386/i386/pmap.c:928
> kernel: first acquired @ ../../../vm/vm_map.c:2077
> kernel: panic: recurse
> kernel:
> kernel: syncing disks, buffers remaining... panic: bremfree: bp 0xd359a250
> not locked
> kernel: Uptime: 6m15s
> kernel: pfs_vncache_unload(): 3 entries remaining
> kernel: Dumping 1535 MB
> kernel: ata0: resetting devices ..
> 
> $FreeBSD: src/sys/vm/vm_map.c,v 1.273 2002/12/01 18:57:56 alc Exp $
> $FreeBSD: src/sys/i386/i386/pmap.c,v 1.375 2002/12/02 04:54:21 alc Exp $
> 
> Regards,
> 
> Marc
> 
> "Premature optimization is the root of all evil." -- Donald E. Knuth

Can you say something more about how you produced this?  Were you
shutting down your X server?

In any case, the attached patch should resolve this.

Regards,
Alan
Index: i386/i386/pmap.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/pmap.c,v
retrieving revision 1.375
diff -c -r1.375 pmap.c
*** i386/i386/pmap.c    2 Dec 2002 04:54:21 -0000       1.375
--- i386/i386/pmap.c    2 Dec 2002 18:50:39 -0000
***************
*** 1213,1219 ****
                        (pmap->pm_ptphint->pindex == ptepindex)) {
                        mpte = pmap->pm_ptphint;
                } else {
!                       mpte = pmap_page_lookup(pmap->pm_pteobj, ptepindex);
                        pmap->pm_ptphint = mpte;
                }
        }
--- 1213,1221 ----
                        (pmap->pm_ptphint->pindex == ptepindex)) {
                        mpte = pmap->pm_ptphint;
                } else {
!                       while ((mpte = vm_page_lookup(pmap->pm_pteobj, ptepindex)) != 
NULL &&
!                              vm_page_sleep_if_busy(mpte, FALSE, "pulook"))
!                               vm_page_lock_queues();
                        pmap->pm_ptphint = mpte;
                }
        }

Reply via email to