Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Apr 2010 20:01:53 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r207246 - user/kmacy/head_page_lock_2/sys/amd64/amd64
Message-ID:  <201004262001.o3QK1rG4085883@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kmacy
Date: Mon Apr 26 20:01:52 2010
New Revision: 207246
URL: http://svn.freebsd.org/changeset/base/207246

Log:
  fix condition associated with decrementing resident_count on pv_list allocation failure

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 19:19:29 2010	(r207245)
+++ user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c	Mon Apr 26 20:01:52 2010	(r207246)
@@ -675,7 +675,7 @@ pmap_bootstrap(vm_paddr_t *firstaddr)
 	/* Initialize the PAT MSR. */
 	pmap_init_pat();
 
-		/* Setup page locks. */
+	/* Setup page locks. */
 	for (i = 0; i < PA_LOCK_COUNT; i++)
 		mtx_init(&pa_lock[i].vp_lock, "page lock", NULL,
 		    MTX_DEF | MTX_RECURSE | MTX_DUPOK);
@@ -2560,11 +2560,13 @@ pmap_demote_pde(pmap_t pmap, pd_entry_t 
 	pt_entry_t *firstpte, newpte;
 	vm_paddr_t mptepa;
 	vm_page_t free, mpte;
+	boolean_t inc;
 
 	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
 	oldpde = *pde;
 	KASSERT((oldpde & (PG_PS | PG_V)) == (PG_PS | PG_V),
 	    ("pmap_demote_pde: oldpde is missing PG_PS and/or PG_V"));
+	inc = FALSE;
 	mpte = pmap_lookup_pt_page(pmap, va);
 	if (mpte != NULL)
 		pmap_remove_pt_page(pmap, mpte);
@@ -2597,12 +2599,14 @@ pmap_demote_pde(pmap_t pmap, pd_entry_t 
 			    " in pmap %p", va, pmap);
 			return (FALSE);
 		}
-		if (va < VM_MAXUSER_ADDRESS)
+		if (va < VM_MAXUSER_ADDRESS) {
 			pmap_resident_count_inc(pmap, 1);
+			inc = TRUE;
+		}
 	}
 	if (TAILQ_EMPTY(pv_list) && ((oldpde & PG_MANAGED) != 0)) {
 		if (pmap_pv_list_try_alloc(pmap, NPTEPG-1, pv_list) == FALSE) {
-			if (mpte == NULL && (va < VM_MAXUSER_ADDRESS))
+			if (inc)
 				pmap_resident_count_dec(pmap, 1);
 			return (FALSE);
 		}



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