From owner-svn-src-user@FreeBSD.ORG Fri Apr 30 00:30:29 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8764C106566B; Fri, 30 Apr 2010 00:30:29 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 763408FC0C; Fri, 30 Apr 2010 00:30:29 +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 o3U0UTKm004813; Fri, 30 Apr 2010 00:30:29 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o3U0UTNr004811; Fri, 30 Apr 2010 00:30:29 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <201004300030.o3U0UTNr004811@svn.freebsd.org> From: Kip Macy Date: Fri, 30 Apr 2010 00:30:29 +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: r207408 - user/kmacy/head_page_lock_incr/sys/i386/xen 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: Fri, 30 Apr 2010 00:30:29 -0000 Author: kmacy Date: Fri Apr 30 00:30:29 2010 New Revision: 207408 URL: http://svn.freebsd.org/changeset/base/207408 Log: convert xen's pmap_extract_and_hold Modified: user/kmacy/head_page_lock_incr/sys/i386/xen/pmap.c Modified: user/kmacy/head_page_lock_incr/sys/i386/xen/pmap.c ============================================================================== --- user/kmacy/head_page_lock_incr/sys/i386/xen/pmap.c Fri Apr 30 00:06:49 2010 (r207407) +++ user/kmacy/head_page_lock_incr/sys/i386/xen/pmap.c Fri Apr 30 00:30:29 2010 (r207408) @@ -1219,14 +1219,19 @@ pmap_extract_and_hold(pmap_t pmap, vm_of pd_entry_t pde; pt_entry_t pte; vm_page_t m; + vm_paddr_t pa; + pa = 0; m = NULL; - vm_page_lock_queues(); PMAP_LOCK(pmap); +retry: pde = PT_GET(pmap_pde(pmap, va)); if (pde != 0) { if (pde & PG_PS) { if ((pde & PG_RW) || (prot & VM_PROT_WRITE) == 0) { + if (vm_page_pa_tryrelock(pmap, (pde & PG_PS_FRAME) | + (va & PDRMASK), &pa)) + goto retry; m = PHYS_TO_VM_PAGE((pde & PG_PS_FRAME) | (va & PDRMASK)); vm_page_hold(m); @@ -1238,13 +1243,15 @@ pmap_extract_and_hold(pmap_t pmap, vm_of PT_SET_MA(PADDR1, 0); if ((pte & PG_V) && ((pte & PG_RW) || (prot & VM_PROT_WRITE) == 0)) { + if (vm_page_pa_tryrelock(pmap, pte & PG_FRAME, &pa)) + goto retry; m = PHYS_TO_VM_PAGE(pte & PG_FRAME); vm_page_hold(m); } sched_unpin(); } } - vm_page_unlock_queues(); + PA_UNLOCK_COND(pa); PMAP_UNLOCK(pmap); return (m); }