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>