From owner-svn-src-stable@FreeBSD.ORG Fri Dec 5 21:14:31 2008 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2000B1065672; Fri, 5 Dec 2008 21:14:31 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0D1098FC16; Fri, 5 Dec 2008 21:14:31 +0000 (UTC) (envelope-from jhb@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 mB5LEUYE073229; Fri, 5 Dec 2008 21:14:30 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB5LEUGm073224; Fri, 5 Dec 2008 21:14:30 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <200812052114.mB5LEUGm073224@svn.freebsd.org> From: John Baldwin Date: Fri, 5 Dec 2008 21:14:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-6@freebsd.org X-SVN-Group: stable-6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185648 - in stable/6/sys: alpha/alpha amd64/amd64 ia64/ia64 powerpc/powerpc sparc64/sparc64 X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 21:14:31 -0000 Author: jhb Date: Fri Dec 5 21:14:30 2008 New Revision: 185648 URL: http://svn.freebsd.org/changeset/base/185648 Log: MFC: It has been observed on the mailing lists that the different categories of pages don't sum to anywhere near the total number of pages on amd64. This is for the most part because uma_small_alloc() pages have never been counted as wired pages, like their kmem_malloc() brethren. They should be. This changes fixes that. Discussed with: alc (a while ago) Modified: stable/6/sys/alpha/alpha/uma_machdep.c stable/6/sys/amd64/amd64/uma_machdep.c stable/6/sys/ia64/ia64/uma_machdep.c stable/6/sys/powerpc/powerpc/uma_machdep.c stable/6/sys/sparc64/sparc64/vm_machdep.c Modified: stable/6/sys/alpha/alpha/uma_machdep.c ============================================================================== --- stable/6/sys/alpha/alpha/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647) +++ stable/6/sys/alpha/alpha/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648) @@ -49,9 +49,9 @@ uma_small_alloc(uma_zone_t zone, int byt *flags = UMA_SLAB_PRIV; if ((wait & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT) - pflags = VM_ALLOC_INTERRUPT; + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED; else - pflags = VM_ALLOC_SYSTEM; + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED; if (wait & M_ZERO) pflags |= VM_ALLOC_ZERO; for (;;) { @@ -76,7 +76,9 @@ uma_small_free(void *mem, int size, u_in vm_page_t m; m = PHYS_TO_VM_PAGE(ALPHA_K0SEG_TO_PHYS((vm_offset_t)mem)); + m->wire_count--; vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); + atomic_subtract_int(&cnt.v_wire_count, 1); } Modified: stable/6/sys/amd64/amd64/uma_machdep.c ============================================================================== --- stable/6/sys/amd64/amd64/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647) +++ stable/6/sys/amd64/amd64/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648) @@ -50,9 +50,9 @@ uma_small_alloc(uma_zone_t zone, int byt *flags = UMA_SLAB_PRIV; if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT) - pflags = VM_ALLOC_INTERRUPT; + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED; else - pflags = VM_ALLOC_SYSTEM; + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED; if (wait & M_ZERO) pflags |= VM_ALLOC_ZERO; for (;;) { @@ -82,7 +82,9 @@ uma_small_free(void *mem, int size, u_in pa = DMAP_TO_PHYS((vm_offset_t)mem); dump_drop_page(pa); m = PHYS_TO_VM_PAGE(pa); + m->wire_count--; vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); + atomic_subtract_int(&cnt.v_wire_count, 1); } Modified: stable/6/sys/ia64/ia64/uma_machdep.c ============================================================================== --- stable/6/sys/ia64/ia64/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647) +++ stable/6/sys/ia64/ia64/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648) @@ -48,9 +48,9 @@ uma_small_alloc(uma_zone_t zone, int byt *flags = UMA_SLAB_PRIV; if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT) - pflags = VM_ALLOC_INTERRUPT; + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED; else - pflags = VM_ALLOC_SYSTEM; + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED; if (wait & M_ZERO) pflags |= VM_ALLOC_ZERO; @@ -76,7 +76,9 @@ uma_small_free(void *mem, int size, u_in vm_page_t m; m = PHYS_TO_VM_PAGE(IA64_RR_MASK((u_int64_t)mem)); + m->wire_count--; vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); + atomic_subtract_int(&cnt.v_wire_count, 1); } Modified: stable/6/sys/powerpc/powerpc/uma_machdep.c ============================================================================== --- stable/6/sys/powerpc/powerpc/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647) +++ stable/6/sys/powerpc/powerpc/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648) @@ -54,9 +54,9 @@ uma_small_alloc(uma_zone_t zone, int byt *flags = UMA_SLAB_PRIV; if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT) - pflags = VM_ALLOC_INTERRUPT; + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED; else - pflags = VM_ALLOC_SYSTEM; + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED; if (wait & M_ZERO) pflags |= VM_ALLOC_ZERO; @@ -84,8 +84,10 @@ uma_small_free(void *mem, int size, u_in vm_page_t m; m = PHYS_TO_VM_PAGE((u_int32_t)mem); + m->wire_count--; vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); + atomic_subtract_int(&cnt.v_wire_count, 1); atomic_subtract_int(&hw_uma_mdpages, 1); } Modified: stable/6/sys/sparc64/sparc64/vm_machdep.c ============================================================================== --- stable/6/sys/sparc64/sparc64/vm_machdep.c Fri Dec 5 20:50:24 2008 (r185647) +++ stable/6/sys/sparc64/sparc64/vm_machdep.c Fri Dec 5 21:14:30 2008 (r185648) @@ -462,9 +462,9 @@ uma_small_alloc(uma_zone_t zone, int byt *flags = UMA_SLAB_PRIV; if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT) - pflags = VM_ALLOC_INTERRUPT; + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED; else - pflags = VM_ALLOC_SYSTEM; + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED; if (wait & M_ZERO) pflags |= VM_ALLOC_ZERO; @@ -501,7 +501,9 @@ uma_small_free(void *mem, int size, u_in PMAP_STATS_INC(uma_nsmall_free); m = PHYS_TO_VM_PAGE(TLB_DIRECT_TO_PHYS((vm_offset_t)mem)); + m->wire_count--; vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); + atomic_subtract_int(&cnt.v_wire_count, 1); }