svn commit: r206977 - in user/kmacy/head_page_lock_2/sys/amd64:
amd64 include
Kip Macy
kmacy at FreeBSD.org
Wed Apr 21 04:35:24 UTC 2010
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) \
More information about the svn-src-user
mailing list