Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Jun 2009 22:22:03 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r195009 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64
Message-ID:  <200906252222.n5PMM3dg066157@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kmacy
Date: Thu Jun 25 22:22:03 2009
New Revision: 195009
URL: http://svn.freebsd.org/changeset/base/195009

Log:
  page wire counts are protected by the pmap lock, back out the use of atomics

Modified:
  user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c

Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c	Thu Jun 25 22:13:44 2009	(r195008)
+++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c	Thu Jun 25 22:22:03 2009	(r195009)
@@ -1356,7 +1356,7 @@ static __inline int
 pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t *free)
 {
 
-	atomic_subtract_int(&m->wire_count, 1);
+	m->wire_count--;
 	if (m->wire_count == 0)
 		return _pmap_unwire_pte_hold(pmap, va, m, free);
 	else
@@ -1580,7 +1580,7 @@ _pmap_allocpte(pmap_t pmap, vm_paddr_t p
 		} else {
 			/* Add reference to pdp page */
 			pdppg = PHYS_TO_VM_PAGE(*pml4 & PG_FRAME);
-			atomic_add_int(&pdppg->wire_count, 1);
+			pdppg->wire_count++;
 		}
 		pdp = (pdp_entry_t *)PHYS_TO_DMAP(*pml4 & PG_FRAME);
 
@@ -1632,7 +1632,7 @@ _pmap_allocpte(pmap_t pmap, vm_paddr_t p
 			} else {
 				/* Add reference to the pd page */
 				pdpg = PHYS_TO_VM_PAGE(*pdp & PG_FRAME);
-				atomic_add_int(&pdpg->wire_count, 1);
+				pdpg->wire_count++;
 			}
 		}
 		pd = (pd_entry_t *)PHYS_TO_DMAP(*pdp & PG_FRAME);
@@ -1661,7 +1661,7 @@ retry:
 	if (pdpe != NULL && (*pdpe & PG_V) != 0) {
 		/* Add a reference to the pd page. */
 		pdpg = PHYS_TO_VM_PAGE(*pdpe & PG_FRAME);
-		atomic_add_int(&pdpg->wire_count, 1);
+		pdpg->wire_count++;
 	} else {
 		/* Allocate a pd page. */
 		ptepindex = pmap_pde_pindex(va);
@@ -1725,7 +1725,7 @@ retry:
 	 */
 	if (pd != NULL && (*pd & PG_V) != 0) {
 		m = PHYS_TO_VM_PAGE(*pd & PG_FRAME);
-		atomic_add_int(&m->wire_count, 1);
+		m->wire_count++;
 	} else {
 		/*
 		 * Here if the pte page isn't mapped, or if it has been
@@ -3104,7 +3104,7 @@ restart:
 		 * Remove extra pte reference
 		 */
 		if (mpte) 
-			atomic_subtract_int(&mpte->wire_count, 1);
+			mpte->wire_count--;
 		
 		/*
 		 * We might be turning off write access to the page,
@@ -3135,7 +3135,7 @@ restart:
 			om = NULL;
 		}
 		if (mpte != NULL) {
-			atomic_subtract_int(&mpte->wire_count, 1);
+			mpte->wire_count--;
 			KASSERT(mpte->wire_count > 0,
 			    ("pmap_enter: missing reference to page table page,"
 			     " va: 0x%lx", va));
@@ -3254,7 +3254,7 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t 
 	if ((*pde & PG_V) != 0) {
 		KASSERT(mpde->wire_count > 1,
 		    ("pmap_enter_pde: mpde's wire count is too low"));
-		atomic_subtract_int(&mpde->wire_count, 1);
+		mpde->wire_count--;
 		CTR2(KTR_PMAP, "pmap_enter_pde: failure for va %#lx"
 		    " in pmap %p", va, pmap);
 		return (FALSE);
@@ -3387,7 +3387,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_
 		 */
 		ptepindex = pmap_pde_pindex(va);
 		if (mpte && (mpte->pindex == ptepindex)) {
-			atomic_add_int(&mpte->wire_count, 1);
+			mpte->wire_count++;
 		} else {
 			/*
 			 * Get the page directory entry
@@ -3402,7 +3402,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_
 				if (*ptepa & PG_PS)
 					return (NULL);
 				mpte = PHYS_TO_VM_PAGE(*ptepa & PG_FRAME);
-				atomic_add_int(&mpte->wire_count, 1);
+				mpte->wire_count++;
 			} else {
 				pa = VM_PAGE_TO_PHYS(m);
 				mpte = _pmap_allocpte(pmap, pa, ptepindex,
@@ -3424,7 +3424,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_
 	pte = vtopte(va);
 	if (*pte) {
 		if (mpte != NULL) {
-			atomic_subtract_int(&mpte->wire_count, 1);
+			mpte->wire_count--;
 			mpte = NULL;
 		}
 		return (mpte);
@@ -3559,7 +3559,7 @@ retry:
 				pmap->pm_stats.resident_count +=
 				    NBPDR / PAGE_SIZE;
 			} else {
-				atomic_subtract_int(&pdpg->wire_count, 1);
+				pdpg->wire_count--;
 				KASSERT(pdpg->wire_count > 0,
 				    ("pmap_object_init_pt: missing reference "
 				     "to page directory page, va: 0x%lx", va));
@@ -3705,8 +3705,8 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm
 				*pde = srcptepaddr & ~PG_W;
 				dst_pmap->pm_stats.resident_count +=
 				    NBPDR / PAGE_SIZE;
-			} else 
-				atomic_subtract_int(&dstmpde->wire_count, 1);
+			} else
+				dstmpde->wire_count--;
 			PA_UNLOCK(pa);
 			continue;
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906252222.n5PMM3dg066157>