Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 May 2010 20:46:17 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r207540 - head/sys/vm
Message-ID:  <201005022046.o42KkHr4069178@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: alc
Date: Sun May  2 20:46:17 2010
New Revision: 207540
URL: http://svn.freebsd.org/changeset/base/207540

Log:
  Defer the acquisition of the page and page queues locks in
  vm_pageout_object_deactivate_pages().

Modified:
  head/sys/vm/vm_pageout.c

Modified: head/sys/vm/vm_pageout.c
==============================================================================
--- head/sys/vm/vm_pageout.c	Sun May  2 20:24:25 2010	(r207539)
+++ head/sys/vm/vm_pageout.c	Sun May  2 20:46:17 2010	(r207540)
@@ -540,6 +540,7 @@ vm_pageout_object_deactivate_pages(pmap,
 	for (object = first_object;; object = backing_object) {
 		if (pmap_resident_count(pmap) <= desired)
 			goto unlock_return;
+		VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
 		if (object->type == OBJT_PHYS || object->paging_in_progress)
 			goto unlock_return;
 
@@ -551,19 +552,18 @@ vm_pageout_object_deactivate_pages(pmap,
 		 */
 		p = TAILQ_FIRST(&object->memq);
 		while (p != NULL) {
-			vm_page_lock(p);
-			vm_page_lock_queues();
-			if (pmap_resident_count(pmap) <= desired) {
-				vm_page_unlock_queues();
-				vm_page_unlock(p);
+			if (pmap_resident_count(pmap) <= desired)
 				goto unlock_return;
-			}
 			next = TAILQ_NEXT(p, listq);
+			if ((p->oflags & VPO_BUSY) != 0 || p->busy != 0) {
+				p = next;
+				continue;
+			}
+			vm_page_lock(p);
+			vm_page_lock_queues();
 			cnt.v_pdpages++;
 			if (p->wire_count != 0 ||
 			    p->hold_count != 0 ||
-			    p->busy != 0 ||
-			    (p->oflags & VPO_BUSY) ||
 			    !pmap_page_exists_quick(pmap, p)) {
 				vm_page_unlock_queues();
 				vm_page_unlock(p);



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