svn commit: r192847 - user/kmacy/releng_7_2_fcs/sys/vm
Kip Macy
kmacy at FreeBSD.org
Tue May 26 19:39:12 UTC 2009
Author: kmacy
Date: Tue May 26 19:39:09 2009
New Revision: 192847
URL: http://svn.freebsd.org/changeset/base/192847
Log:
add vm_page_cache_locked interface to avoid recursive acquisition of the page queue mutex
Modified:
user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c
user/kmacy/releng_7_2_fcs/sys/vm/vm_page.h
user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c
Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c Tue May 26 19:06:56 2009 (r192846)
+++ user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c Tue May 26 19:39:09 2009 (r192847)
@@ -1660,8 +1660,8 @@ vm_page_try_to_free(vm_page_t m)
*
* This routine may not block.
*/
-void
-vm_page_cache(vm_page_t m)
+static void
+_vm_page_cache(vm_page_t m, int locked)
{
vm_object_t object;
vm_page_t root;
@@ -1694,8 +1694,10 @@ vm_page_cache(vm_page_t m)
/*
* Remove the page from the paging queues.
*/
- vm_pageq_remove(m);
-
+ if (locked)
+ vm_pageq_remove_locked(m);
+ else
+ vm_pageq_remove(m);
/*
* Remove the page from the object's collection of resident
* pages.
@@ -1764,6 +1766,20 @@ vm_page_cache(vm_page_t m)
}
}
+void
+vm_page_cache(vm_page_t m)
+{
+
+ _vm_page_cache(m, 0);
+}
+
+void
+vm_page_cache_locked(vm_page_t m)
+{
+
+ _vm_page_cache(m, 1);
+}
+
/*
* vm_page_dontneed
*
Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_page.h
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/vm/vm_page.h Tue May 26 19:06:56 2009 (r192846)
+++ user/kmacy/releng_7_2_fcs/sys/vm/vm_page.h Tue May 26 19:39:09 2009 (r192847)
@@ -325,6 +325,7 @@ void vm_page_activate_locked (vm_page_t)
vm_page_t vm_page_alloc (vm_object_t, vm_pindex_t, int);
vm_page_t vm_page_grab (vm_object_t, vm_pindex_t, int);
void vm_page_cache (register vm_page_t);
+void vm_page_cache_locked (register vm_page_t);
void vm_page_cache_free(vm_object_t, vm_pindex_t, vm_pindex_t);
void vm_page_cache_remove(vm_page_t);
void vm_page_cache_transfer(vm_object_t, vm_pindex_t, vm_object_t);
Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c Tue May 26 19:06:56 2009 (r192846)
+++ user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c Tue May 26 19:39:09 2009 (r192847)
@@ -878,7 +878,7 @@ rescan0:
* Clean pages can be placed onto the cache queue.
* This effectively frees them.
*/
- vm_page_cache(m);
+ vm_page_cache_locked(m);
--page_shortage;
} else if ((m->flags & PG_WINATCFLS) == 0 && pass == 0) {
/*
@@ -1157,7 +1157,7 @@ unlock_and_continue:
if (object->ref_count == 0) {
pmap_remove_all(m);
if (m->dirty == 0)
- vm_page_cache(m);
+ vm_page_cache_locked(m);
else
vm_page_deactivate_locked(m);
} else {
More information about the svn-src-user
mailing list