Date: Mon, 26 Apr 2010 01:40:52 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r207216 - user/kmacy/head_page_lock_2/sys/amd64/amd64 Message-ID: <201004260140.o3Q1eqAU032019@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Mon Apr 26 01:40:52 2010 New Revision: 207216 URL: http://svn.freebsd.org/changeset/base/207216 Log: - more white space harmonization - move pmap lock out of the loop in pmap_enter_object (as on HEAD) Modified: user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Modified: user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Mon Apr 26 01:13:10 2010 (r207215) +++ user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Mon Apr 26 01:40:52 2010 (r207216) @@ -2124,10 +2124,9 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv int idx, field, bit; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - - atomic_add_int(&pv_entry_count, -1); PV_STAT(pv_entry_frees++); PV_STAT(pv_entry_spare++); + atomic_add_int(&pv_entry_count, -1); pc = pv_to_chunk(pv); idx = pv - &pc->pc_pventry[0]; field = idx / 64; @@ -2167,9 +2166,8 @@ get_pv_entry(pmap_t pmap) vm_page_t m; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - - atomic_add_int(&pv_entry_count, 1); PV_STAT(pv_entry_allocs++); + atomic_add_int(&pv_entry_count, 1); if (pv_entry_count > pv_entry_high_water) if (ratecheck(&lastprint, &printinterval)) printf("Approaching the limit on PV entries, consider " @@ -3647,15 +3645,19 @@ pmap_enter_object(pmap_t pmap, vm_offset vm_offset_t va; vm_page_t m, mpte; vm_pindex_t diff, psize; + vm_paddr_t pa; VM_OBJECT_LOCK_ASSERT(m_start->object, MA_OWNED); psize = atop(end - start); mpte = NULL; m = m_start; + pa = 0; + PMAP_LOCK(pmap); +restart: while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { va = start + ptoa(diff); - vm_page_lock(m); - PMAP_LOCK(pmap); + if (pa_tryrelock(pmap, VM_PAGE_TO_PHYS(m), &pa)) + goto restart; if ((va & PDRMASK) == 0 && va + NBPDR <= end && (VM_PAGE_TO_PHYS(m) & PDRMASK) == 0 && pg_ps_enabled && vm_reserv_level_iffullpop(m) == 0 && @@ -3664,10 +3666,11 @@ pmap_enter_object(pmap_t pmap, vm_offset else mpte = pmap_enter_quick_locked(pmap, va, m, prot, mpte); - PMAP_UNLOCK(pmap); - vm_page_unlock(m); m = TAILQ_NEXT(m, listq); } + if (pa) + PA_UNLOCK(pa); + PMAP_UNLOCK(pmap); } /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004260140.o3Q1eqAU032019>