From owner-svn-src-user@FreeBSD.ORG Tue May 26 19:39:10 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3461010656BF; Tue, 26 May 2009 19:39:10 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 07CD78FC20; Tue, 26 May 2009 19:39:10 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4QJd9Ah071369; Tue, 26 May 2009 19:39:09 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4QJd93H071365; Tue, 26 May 2009 19:39:09 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200905261939.n4QJd93H071365@svn.freebsd.org> From: Kip Macy Date: Tue, 26 May 2009 19:39:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192847 - user/kmacy/releng_7_2_fcs/sys/vm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 May 2009 19:39:12 -0000 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 {