From c53e8c5654b2cbef53890632c0bfac3bc4685ada Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Tue, 1 Jul 2003 07:33:41 +0000 Subject: Modify vm_page_alloc() and vm_page_select_cache() to allow the page that is returned by vm_page_select_cache() to belong to the object that is already locked by the caller to vm_page_alloc(). --- sys/vm/vm_page.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'sys/vm') diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 0df20b5605cb..767fbbff8acc 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -720,7 +720,8 @@ vm_page_select_cache(int color) m = vm_pageq_find(PQ_CACHE, color, FALSE); if (m && ((m->flags & (PG_BUSY|PG_UNMANAGED)) || m->busy || m->hold_count || m->wire_count || - !VM_OBJECT_TRYLOCK(m->object))) { + (!VM_OBJECT_TRYLOCK(m->object) && + !VM_OBJECT_LOCKED(m->object)))) { vm_page_deactivate(m); continue; } @@ -810,7 +811,8 @@ loop: pmap_remove_all(m); vm_page_free(m); vm_page_unlock_queues(); - VM_OBJECT_UNLOCK(m_object); + if (m_object != object) + VM_OBJECT_UNLOCK(m_object); goto loop; } else { /* -- cgit v1.3