Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Apr 2013 05:34:33 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r249605 - head/sys/vm
Message-ID:  <201304180534.r3I5YXK4015577@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: alc
Date: Thu Apr 18 05:34:33 2013
New Revision: 249605
URL: http://svnweb.freebsd.org/changeset/base/249605

Log:
  When calculating the number of reserved nodes, discount the pages that will
  be used to store the nodes.
  
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  head/sys/vm/vm_radix.c

Modified: head/sys/vm/vm_radix.c
==============================================================================
--- head/sys/vm/vm_radix.c	Thu Apr 18 05:12:11 2013	(r249604)
+++ head/sys/vm/vm_radix.c	Thu Apr 18 05:34:33 2013	(r249605)
@@ -360,10 +360,17 @@ vm_radix_node_zone_init(void *mem, int s
 static void
 vm_radix_prealloc(void *arg __unused)
 {
+	int nodes;
 
-	if (!uma_zone_reserve_kva(vm_radix_node_zone, cnt.v_page_count))
+	/*
+	 * Calculate the number of reserved nodes, discounting the pages that
+	 * are needed to store them.
+	 */
+	nodes = ((vm_paddr_t)cnt.v_page_count * PAGE_SIZE) / (PAGE_SIZE +
+	    sizeof(struct vm_radix_node));
+	if (!uma_zone_reserve_kva(vm_radix_node_zone, nodes))
 		panic("%s: unable to create new zone", __func__);
-	uma_prealloc(vm_radix_node_zone, cnt.v_page_count);
+	uma_prealloc(vm_radix_node_zone, nodes);
 }
 SYSINIT(vm_radix_prealloc, SI_SUB_KMEM, SI_ORDER_SECOND, vm_radix_prealloc,
     NULL);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304180534.r3I5YXK4015577>