svn commit: r195279 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64

Kip Macy kmacy at FreeBSD.org
Thu Jul 2 04:56:12 UTC 2009


Author: kmacy
Date: Thu Jul  2 04:56:11 2009
New Revision: 195279
URL: http://svn.freebsd.org/changeset/base/195279

Log:
  avoid deadlock between pmap_collect and pageout

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 Jul  2 00:50:19 2009	(r195278)
+++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c	Thu Jul  2 04:56:11 2009	(r195279)
@@ -1953,7 +1953,17 @@ pmap_collect(pmap_t locked_pmap, struct 
 	vm_offset_t va;
 	vm_page_t m, free = NULL;
 
-	vm_page_lock_queues();
+	/*
+	 * This isn't really a solid fix as we need to assure the caller
+	 * that pmap state hasn't changed -  but the way pageout works
+	 * we typically need to call pmap functions with the page queue lock
+	 * held
+	 */
+	if (vm_page_trylock_queues() == 0) {
+		PMAP_UNLOCK(locked_pmap);
+		vm_page_lock_queues();
+		PMAP_LOCK(locked_pmap);
+	}
 	TAILQ_FOREACH(m, &vpq->pl, pageq) {
 		if (m->hold_count || m->busy || vm_page_trylock(m) == 0)
 			continue;


More information about the svn-src-user mailing list