Date: Tue, 26 May 2009 19:39:09 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r192847 - user/kmacy/releng_7_2_fcs/sys/vm Message-ID: <200905261939.n4QJd93H071365@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905261939.n4QJd93H071365>