svn commit: r207540 - head/sys/vm
Alan Cox
alc at FreeBSD.org
Sun May 2 20:46:17 UTC 2010
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);
More information about the svn-src-all
mailing list