svn commit: r255311 - head/sys/amd64/amd64

Konstantin Belousov kib at FreeBSD.org
Fri Sep 6 16:48:35 UTC 2013


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;
 				}
 			}


More information about the svn-src-all mailing list