Index: pmap.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/pmap.c,v retrieving revision 1.259.2.3 diff -p -r1.259.2.3 pmap.c *** pmap.c 5 Mar 2011 20:52:08 -0000 1.259.2.3 --- pmap.c 9 Mar 2011 08:51:42 -0000 *************** pmap_growkernel(vaddr_t maxkvaddr) *** 1335,1350 **** { struct pmap *pm = pmap_kernel(); paddr_t pa; - bool took_lock; if (maxkvaddr >= KERNEND) { printf("WARNING: cannot extend kernel pmap beyond %p to %p\n", (void *)KERNEND, (void *)maxkvaddr); return (kbreak); } - took_lock = lock_available; - if (__predict_true(took_lock)) - mutex_enter(&pmap_lock); DPRINTF(PDB_GROW, ("pmap_growkernel(%lx...%lx)\n", kbreak, maxkvaddr)); /* Align with the start of a page table */ for (kbreak &= (-1 << PDSHIFT); kbreak < maxkvaddr; --- 1335,1346 ---- *************** pmap_growkernel(vaddr_t maxkvaddr) *** 1362,1369 **** ENTER_STAT(ptpneeded); } } - if (__predict_true(took_lock)) - mutex_exit(&pmap_lock); return (kbreak); } --- 1358,1363 ---- *************** pmap_protect(struct pmap *pm, vaddr_t sv *** 2103,2109 **** return; } - mutex_enter(&pmap_lock); sva = trunc_page(sva); for (; sva < eva; sva += PAGE_SIZE) { #ifdef DEBUG --- 2097,2102 ---- *************** pmap_protect(struct pmap *pm, vaddr_t sv *** 2163,2169 **** tlb_flush_pte(sva, pm); } pv_check(); - mutex_exit(&pmap_lock); } /* --- 2156,2161 ---- *************** pmap_kprotect(vaddr_t va, vm_prot_t prot *** 2250,2256 **** int64_t data; int rv; - mutex_enter(&pmap_lock); data = pseg_get(pm, va); KASSERT(data & TLB_V); if (prot & VM_PROT_WRITE) { --- 2242,2247 ---- *************** pmap_kprotect(vaddr_t va, vm_prot_t prot *** 2264,2270 **** KASSERT(pmap_ctx(pm)>=0); tsb_invalidate(va, pm); tlb_flush_pte(va, pm); - mutex_exit(&pmap_lock); } /* --- 2255,2260 ---- *************** pmap_unwire(pmap_t pmap, vaddr_t va) *** 2811,2817 **** return; } #endif - mutex_enter(&pmap_lock); data = pseg_get(pmap, va & PV_VAMASK); KASSERT(data & TLB_V); data &= ~TLB_TSB_LOCK; --- 2801,2806 ---- *************** pmap_unwire(pmap_t pmap, vaddr_t va) *** 2819,2825 **** if (rv & 1) panic("pmap_unwire: pseg_set needs spare! rv=%d\n", rv); pv_check(); - mutex_exit(&pmap_lock); } /* --- 2808,2813 ---- *************** pmap_count_wired(struct pmap *pm) *** 3057,3063 **** int i, j, k, n; /* Don't want one of these pages reused while we're reading it. */ ! mutex_enter(&pmap_lock); n = 0; for (i = 0; i < STSZ; i++) { pdir = (paddr_t *)(u_long)ldxa((vaddr_t)&pm->pm_segs[i], --- 3045,3051 ---- int i, j, k, n; /* Don't want one of these pages reused while we're reading it. */ ! mutex_enter(&pmap_lock); /* XXX uvmplock */ n = 0; for (i = 0; i < STSZ; i++) { pdir = (paddr_t *)(u_long)ldxa((vaddr_t)&pm->pm_segs[i], *************** pmap_count_wired(struct pmap *pm) *** 3079,3091 **** } } } ! mutex_exit(&pmap_lock); if (pm->pm_stats.wired_count != n) printf("pmap_count_wired: pm_stats = %ld, counted: %d\n", pm->pm_stats.wired_count, n); - return n; } #endif /* PMAP_COUNT_DEBUG */ --- 3067,3078 ---- } } } ! mutex_exit(&pmap_lock); /* XXX uvmplock */ if (pm->pm_stats.wired_count != n) printf("pmap_count_wired: pm_stats = %ld, counted: %d\n", pm->pm_stats.wired_count, n); return n; } #endif /* PMAP_COUNT_DEBUG */