> Date: Sat, 9 Jan 2016 13:07:50 +0100
> From: Tobias Ulmer <[email protected]>
> 
> Same on my O2. Looks like fallout from the pmap/cache work
> starting Dec 31

Can you try the diff below?


Index: pmap.c
===================================================================
RCS file: /home/cvs/src/sys/arch/mips64/mips64/pmap.c,v
retrieving revision 1.84
diff -u -p -r1.84 pmap.c
--- pmap.c      5 Jan 2016 05:42:27 -0000       1.84
+++ pmap.c      9 Jan 2016 12:25:04 -0000
@@ -1075,18 +1075,15 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd
         */
        mtx_enter(&pmap->pm_pte_mtx);
        if ((pte = pmap_segmap(pmap, va)) == NULL) {
-               unsigned int wflags = PR_WAITOK | PR_ZERO;
-
-               if (flags & PMAP_CANFAIL)
-                       wflags |= PR_LIMITFAIL;
-       
-               pte = (pt_entry_t *)pool_get(&pmap_pg_pool, wflags);
+               pte = pool_get(&pmap_pg_pool, PR_NOWAIT | PR_ZERO);
                if (pte == NULL) {
                        mtx_leave(&pmap->pm_pte_mtx);
                        if (pg != NULL)
                                mtx_leave(&pg->mdpage.pv_mtx);
                        mtx_leave(&pmap->pm_dir_mtx);
-                       return ENOMEM;  /* can only happen if PMAP_CANFAIL */
+                       if (flags & PMAP_CANFAIL)
+                               return ENOMEM;
+                       panic("%s: out of memory!", __func__);
                }
 
                pmap_segmap(pmap, va) = pte;

Reply via email to