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