Module Name: src Committed By: mrg Date: Mon Apr 11 04:35:28 UTC 2011
Modified Files: src/sys/arch/sparc64/sparc64 [rmind-uvmplock]: pmap.c Log Message: don't take pmap_lock in a few places. there's a bunch more work we can do in here, but i've run with this change for ages. To generate a diff of this commit: cvs rdiff -u -r1.259.2.3 -r1.259.2.4 src/sys/arch/sparc64/sparc64/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc64/sparc64/pmap.c diff -u src/sys/arch/sparc64/sparc64/pmap.c:1.259.2.3 src/sys/arch/sparc64/sparc64/pmap.c:1.259.2.4 --- src/sys/arch/sparc64/sparc64/pmap.c:1.259.2.3 Sat Mar 5 20:52:08 2011 +++ src/sys/arch/sparc64/sparc64/pmap.c Mon Apr 11 04:35:27 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.259.2.3 2011/03/05 20:52:08 rmind Exp $ */ +/* $NetBSD: pmap.c,v 1.259.2.4 2011/04/11 04:35:27 mrg Exp $ */ /* * * Copyright (C) 1996-1999 Eduardo Horvath. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.259.2.3 2011/03/05 20:52:08 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.259.2.4 2011/04/11 04:35:27 mrg Exp $"); #undef NO_VCACHE /* Don't forget the locked TLB in dostart */ #define HWREF @@ -1335,16 +1335,12 @@ { 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; @@ -1362,8 +1358,6 @@ ENTER_STAT(ptpneeded); } } - if (__predict_true(took_lock)) - mutex_exit(&pmap_lock); return (kbreak); } @@ -2103,7 +2097,6 @@ return; } - mutex_enter(&pmap_lock); sva = trunc_page(sva); for (; sva < eva; sva += PAGE_SIZE) { #ifdef DEBUG @@ -2163,7 +2156,6 @@ tlb_flush_pte(sva, pm); } pv_check(); - mutex_exit(&pmap_lock); } /* @@ -2250,7 +2242,6 @@ int64_t data; int rv; - mutex_enter(&pmap_lock); data = pseg_get(pm, va); KASSERT(data & TLB_V); if (prot & VM_PROT_WRITE) { @@ -2264,7 +2255,6 @@ KASSERT(pmap_ctx(pm)>=0); tsb_invalidate(va, pm); tlb_flush_pte(va, pm); - mutex_exit(&pmap_lock); } /* @@ -2811,7 +2801,6 @@ return; } #endif - mutex_enter(&pmap_lock); data = pseg_get(pmap, va & PV_VAMASK); KASSERT(data & TLB_V); data &= ~TLB_TSB_LOCK; @@ -2819,7 +2808,6 @@ if (rv & 1) panic("pmap_unwire: pseg_set needs spare! rv=%d\n", rv); pv_check(); - mutex_exit(&pmap_lock); } /* @@ -3057,7 +3045,7 @@ int i, j, k, n; /* Don't want one of these pages reused while we're reading it. */ - mutex_enter(&pmap_lock); + 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], @@ -3079,13 +3067,12 @@ } } } - mutex_exit(&pmap_lock); + 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 */