Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Sep 2013 16:48:34 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r255311 - head/sys/amd64/amd64
Message-ID:  <201309061648.r86GmY79026880@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Fri Sep  6 16:48:34 2013
New Revision: 255311
URL: http://svnweb.freebsd.org/changeset/base/255311

Log:
  In pmap_ts_referenced(), when restarting the loop due to pv list
  generation changed, do not drop and immediately relock the pv list.
  
  Suggested and reviewed by:	alc
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/amd64/amd64/pmap.c

Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c	Fri Sep  6 16:34:09 2013	(r255310)
+++ head/sys/amd64/amd64/pmap.c	Fri Sep  6 16:48:34 2013	(r255311)
@@ -5086,8 +5086,8 @@ pmap_ts_referenced(vm_page_t m)
 	lock = VM_PAGE_TO_PV_LIST_LOCK(m);
 	pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
 	rtval = 0;
-retry:
 	rw_wlock(lock);
+retry:
 	if ((m->flags & PG_FICTITIOUS) != 0)
 		goto small_mappings;
 	TAILQ_FOREACH_SAFE(pv, &pvh->pv_list, pv_next, pvn) {
@@ -5099,7 +5099,6 @@ retry:
 			rw_wlock(lock);
 			if (pvh_gen != pvh->pv_gen) {
 				PMAP_UNLOCK(pmap);
-				rw_wunlock(lock);
 				goto retry;
 			}
 		}
@@ -5154,7 +5153,6 @@ small_mappings:
 				if (pvh_gen != pvh->pv_gen ||
 				    md_gen != m->md.pv_gen) {
 					PMAP_UNLOCK(pmap);
-					rw_wunlock(lock);
 					goto retry;
 				}
 			}



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