From owner-svn-src-user@FreeBSD.ORG Sun Mar 10 17:30:58 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id AB398756; Sun, 10 Mar 2013 17:30:58 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 8FC1C842; Sun, 10 Mar 2013 17:30:58 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2AHUwf6083339; Sun, 10 Mar 2013 17:30:58 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2AHUvDi083335; Sun, 10 Mar 2013 17:30:57 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201303101730.r2AHUvDi083335@svn.freebsd.org> From: Alan Cox Date: Sun, 10 Mar 2013 17:30:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r248134 - user/attilio/vmcontention/sys/vm X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 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: Sun, 10 Mar 2013 17:30:58 -0000 Author: alc Date: Sun Mar 10 17:30:57 2013 New Revision: 248134 URL: http://svnweb.freebsd.org/changeset/base/248134 Log: Introduce vm_radix_is_empty(), and use it in place of vm_object_cache_is_empty() where the caller is aware of the page cache's implementation as a radix trie. Sponsored by: EMC / Isilon Storage Division Modified: user/attilio/vmcontention/sys/vm/_vm_radix.h user/attilio/vmcontention/sys/vm/vm_object.c user/attilio/vmcontention/sys/vm/vm_object.h user/attilio/vmcontention/sys/vm/vm_page.c Modified: user/attilio/vmcontention/sys/vm/_vm_radix.h ============================================================================== --- user/attilio/vmcontention/sys/vm/_vm_radix.h Sun Mar 10 17:10:16 2013 (r248133) +++ user/attilio/vmcontention/sys/vm/_vm_radix.h Sun Mar 10 17:30:57 2013 (r248134) @@ -1,4 +1,5 @@ /* + * Copyright (c) 2013 EMC Corp. * Copyright (c) 2011 Jeffrey Roberson * Copyright (c) 2008 Mayur Shardul * All rights reserved. @@ -36,4 +37,11 @@ struct vm_radix { uintptr_t rt_root; }; +static __inline boolean_t +vm_radix_is_empty(struct vm_radix *rtree) +{ + + return (rtree->rt_root == 0); +} + #endif /* !__VM_RADIX_H_ */ Modified: user/attilio/vmcontention/sys/vm/vm_object.c ============================================================================== --- user/attilio/vmcontention/sys/vm/vm_object.c Sun Mar 10 17:10:16 2013 (r248133) +++ user/attilio/vmcontention/sys/vm/vm_object.c Sun Mar 10 17:30:57 2013 (r248134) @@ -168,7 +168,7 @@ vm_object_zdtor(void *mem, int size, voi object = (vm_object_t)mem; KASSERT(TAILQ_EMPTY(&object->memq), ("object %p has resident pages in its memq", object)); - KASSERT(object->rtree.rt_root == 0, + KASSERT(vm_radix_is_empty(&object->rtree), ("object %p has resident pages in its trie", object)); #if VM_NRESERVLEVEL > 0 KASSERT(LIST_EMPTY(&object->rvq), Modified: user/attilio/vmcontention/sys/vm/vm_object.h ============================================================================== --- user/attilio/vmcontention/sys/vm/vm_object.h Sun Mar 10 17:10:16 2013 (r248133) +++ user/attilio/vmcontention/sys/vm/vm_object.h Sun Mar 10 17:30:57 2013 (r248134) @@ -248,7 +248,7 @@ static __inline boolean_t vm_object_cache_is_empty(vm_object_t object) { - return (object->cache.rt_root == 0); + return (vm_radix_is_empty(&object->cache)); } vm_object_t vm_object_allocate (objtype_t, vm_pindex_t); Modified: user/attilio/vmcontention/sys/vm/vm_page.c ============================================================================== --- user/attilio/vmcontention/sys/vm/vm_page.c Sun Mar 10 17:10:16 2013 (r248133) +++ user/attilio/vmcontention/sys/vm/vm_page.c Sun Mar 10 17:30:57 2013 (r248134) @@ -1018,7 +1018,7 @@ vm_page_cache_free(vm_object_t object, v boolean_t empty; mtx_lock(&vm_page_queue_free_mtx); - if (__predict_false(vm_object_cache_is_empty(object))) { + if (__predict_false(vm_radix_is_empty(&object->cache))) { mtx_unlock(&vm_page_queue_free_mtx); return; } @@ -1035,7 +1035,7 @@ vm_page_cache_free(vm_object_t object, v cnt.v_cache_count--; cnt.v_free_count++; } - empty = vm_object_cache_is_empty(object); + empty = vm_radix_is_empty(&object->cache); mtx_unlock(&vm_page_queue_free_mtx); if (object->type == OBJT_VNODE && empty) vdrop(object->handle); @@ -1096,7 +1096,7 @@ vm_page_cache_transfer(vm_object_t orig_ * not. */ VM_OBJECT_ASSERT_WLOCKED(new_object); - KASSERT(vm_object_cache_is_empty(new_object), + KASSERT(vm_radix_is_empty(&new_object->cache), ("vm_page_cache_transfer: object %p has cached pages", new_object)); mtx_lock(&vm_page_queue_free_mtx); @@ -2186,7 +2186,7 @@ vm_page_cache(vm_page_t m) mtx_lock(&vm_page_queue_free_mtx); m->flags |= PG_CACHED; cnt.v_cache_count++; - cache_was_empty = vm_object_cache_is_empty(object); + cache_was_empty = vm_radix_is_empty(&object->cache); vm_radix_insert(&object->cache, m->pindex, m); #if VM_NRESERVLEVEL > 0 if (!vm_reserv_free_page(m)) {