From owner-svn-src-user@FreeBSD.ORG Mon Apr 26 02:35:38 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 DDDEA106564A; Mon, 26 Apr 2010 02:35:37 +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 CE5298FC1F; Mon, 26 Apr 2010 02:35:37 +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 o3Q2ZbVF044041; Mon, 26 Apr 2010 02:35:37 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o3Q2Zb8M044039; Mon, 26 Apr 2010 02:35:37 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <201004260235.o3Q2Zb8M044039@svn.freebsd.org> From: Kip Macy Date: Mon, 26 Apr 2010 02:35:37 +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: r207218 - 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 02:35:38 -0000 Author: kmacy Date: Mon Apr 26 02:35:37 2010 New Revision: 207218 URL: http://svn.freebsd.org/changeset/base/207218 Log: - white space harmonize - collapse expressions and remove temporary in pmap_change_wiring - remove invalid XXX pmap lock drop - handle two cases of pmap lock drop with gen_count check 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:54:45 2010 (r207217) +++ user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Mon Apr 26 02:35:37 2010 (r207218) @@ -2946,10 +2946,6 @@ restart: */ if ((*pte & PG_G) == 0) anyvalid = 1; - /* - * XXX check if the pmap lock was dropped - maybe we need - * to restart - */ if (pmap_remove_pte(pmap, pte, sva, ptpaddr, &free)) break; } @@ -3024,11 +3020,6 @@ pmap_remove_all(vm_page_t m) if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) vm_page_dirty(m); free = NULL; - - /* - * XXX pmap_unuse_pt can drop the pmap lock - * - */ pmap_unuse_pt(pmap, pv->pv_va, *pde, &free); pmap_invalidate_page(pmap, pv->pv_va); pmap_free_zero_pages(free); @@ -3106,6 +3097,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sv TAILQ_INIT(&pv_list); pa = 0; anychanged = 0; + PMAP_LOCK(pmap); restart: for (; sva < eva; sva = va_next) { @@ -3690,7 +3682,6 @@ void pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot) { - vm_page_lock_assert(m, MA_OWNED); PMAP_LOCK(pmap); (void) pmap_enter_quick_locked(pmap, va, m, prot, NULL); PMAP_UNLOCK(pmap); @@ -3913,9 +3904,9 @@ pmap_change_wiring(pmap_t pmap, vm_offse { pd_entry_t *pde; pt_entry_t *pte; - vm_paddr_t pa; - boolean_t slept; struct pv_list_head pv_list; + uint32_t gen_count; + vm_paddr_t pa = 0; TAILQ_INIT(&pv_list); @@ -3923,27 +3914,23 @@ pmap_change_wiring(pmap_t pmap, vm_offse * Wiring is not a hardware characteristic so there is no need to * invalidate TLB. */ - pa = 0; PMAP_LOCK(pmap); retry: - slept = FALSE; pde = pmap_pde(pmap, va); if ((*pde & PG_PS) && (!wired != ((*pde & PG_W) == 0))) { - if (TAILQ_EMPTY(&pv_list)) - slept = pmap_pv_list_alloc(pmap, NPTEPG-1, &pv_list); - if (slept) + if (TAILQ_EMPTY(&pv_list) && + pmap_pv_list_alloc(pmap, NPTEPG-1, &pv_list)) goto retry; - if (pa_tryrelock(pmap, *pde & PG_FRAME, &pa)) goto retry; } if ((*pde & PG_PS) != 0) { if (!wired != ((*pde & PG_W) == 0)) { - /* - * XXX do we need to check if the pmap lock was dropped - */ + gen_count = pmap->pm_gen_count; if (!pmap_demote_pde(pmap, pde, va, &pv_list)) panic("pmap_change_wiring: demotion failed"); + if (gen_count != pmap->pm_gen_count) + goto retry; } else goto out; } @@ -4298,6 +4285,7 @@ pmap_remove_pages(pmap_t pmap) int field, idx, iter; int64_t bit; uint64_t inuse, bitmask; + uint32_t gen_count; int allfree; if (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)) { @@ -4402,11 +4390,11 @@ restart: vm_page_flag_clear(m, PG_WRITEABLE); } } - /* - * - * XXX check if the pmap lock has been dropped - */ + gen_count = pmap->pm_gen_count; pmap_unuse_pt(pmap, pv->pv_va, ptepde, &free); + if (pmap->pm_gen_count != gen_count && + pmap->pm_gen_count != gen_count + 1) + goto restart; } } if (allfree) {