From owner-svn-src-user@FreeBSD.ORG Wed Apr 21 04:35:24 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 3DF941065672; Wed, 21 Apr 2010 04:35:24 +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 1457E8FC16; Wed, 21 Apr 2010 04:35:24 +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 o3L4ZNW2046777; Wed, 21 Apr 2010 04:35:23 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o3L4ZNTb046774; Wed, 21 Apr 2010 04:35:23 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <201004210435.o3L4ZNTb046774@svn.freebsd.org> From: Kip Macy Date: Wed, 21 Apr 2010 04:35:23 +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: r206977 - in user/kmacy/head_page_lock_2/sys/amd64: amd64 include 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: Wed, 21 Apr 2010 04:35:24 -0000 Author: kmacy Date: Wed Apr 21 04:35:23 2010 New Revision: 206977 URL: http://svn.freebsd.org/changeset/base/206977 Log: simplify gen_count tracking Modified: user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c user/kmacy/head_page_lock_2/sys/amd64/include/pmap.h Modified: user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Wed Apr 21 03:37:28 2010 (r206976) +++ user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Wed Apr 21 04:35:23 2010 (r206977) @@ -553,7 +553,7 @@ static int pa_tryrelock(pmap_t pmap, vm_paddr_t pa, vm_paddr_t *locked) { vm_paddr_t lockpa; - uint16_t gen_count; + uint32_t gen_count; PMAP_LOCK_ASSERT(pmap, MA_OWNED); gen_count = pmap->pm_gen_count; @@ -568,16 +568,13 @@ pa_tryrelock(pmap_t pmap, vm_paddr_t pa, } if (PA_TRYLOCK(pa)) return (0); - pmap->pm_retry_depth++; PMAP_UNLOCK(pmap); atomic_add_int((volatile int *)&pmap_tryrelock_restart, 1); PA_LOCK(pa); - mtx_lock(&(pmap)->pm_mtx); - pmap->pm_retry_depth--; - if (pmap->pm_retry_depth) - pmap->pm_gen_count++; + PMAP_LOCK(pmap); - if (gen_count != pmap->pm_gen_count) { + if (pmap->pm_gen_count != gen_count + 1) { + pmap->pm_retries++; atomic_add_int((volatile int *)&pmap_tryrelock_race, 1); return (EAGAIN); } @@ -2021,8 +2018,8 @@ pmap_release(pmap_t pmap) vm_page_t m; KASSERT(pmap->pm_stats.resident_count == 0, - ("pmap_release: pmap resident count %ld != 0 gen_count == %d ", - pmap->pm_stats.resident_count, pmap->pm_gen_count)); + ("pmap_release: pmap resident count %ld != 0 retries == %d ", + pmap->pm_stats.resident_count, pmap->pm_retries)); KASSERT(pmap->pm_root == NULL, ("pmap_release: pmap has reserved page table page(s)")); Modified: user/kmacy/head_page_lock_2/sys/amd64/include/pmap.h ============================================================================== --- user/kmacy/head_page_lock_2/sys/amd64/include/pmap.h Wed Apr 21 03:37:28 2010 (r206976) +++ user/kmacy/head_page_lock_2/sys/amd64/include/pmap.h Wed Apr 21 04:35:23 2010 (r206977) @@ -246,8 +246,8 @@ struct pmap { pml4_entry_t *pm_pml4; /* KVA of level 4 page table */ TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ u_int pm_active; /* active on cpus */ - uint16_t pm_gen_count; /* generation count (pmap lock dropped) */ - uint16_t pm_retry_depth; /* number of cases in retry */ + uint32_t pm_gen_count; /* generation count (pmap lock dropped) */ + u_int pm_retries; struct pmap_statistics pm_stats; /* pmap statistics */ vm_page_t pm_root; /* spare page table pages */ vm_page_t pm_free; /* Temporary free pages. */ @@ -261,8 +261,7 @@ extern struct pmap kernel_pmap_store; #define PMAP_UPDATE_GEN_COUNT(pmap) \ do { \ - if (pmap->pm_retry_depth) \ - pmap->pm_gen_count++; \ + pmap->pm_gen_count++; \ } while (0) #define PMAP_LOCK(pmap) \