From owner-svn-src-user@FreeBSD.ORG Mon Apr 26 01:40:52 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8FBB5106566B; Mon, 26 Apr 2010 01:40:52 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 66CA18FC08; Mon, 26 Apr 2010 01:40:52 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o3Q1eq6k032021; Mon, 26 Apr 2010 01:40:52 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o3Q1eqAU032019; Mon, 26 Apr 2010 01:40:52 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <201004260140.o3Q1eqAU032019@svn.freebsd.org> From: Kip Macy Date: Mon, 26 Apr 2010 01:40:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r207216 - user/kmacy/head_page_lock_2/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Apr 2010 01:40:52 -0000 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); } /*