Module Name:    src
Committed By:   para
Date:           Thu Feb  2 18:59:45 UTC 2012

Modified Files:
        src/sys/arch/alpha/alpha: pmap.c
        src/sys/arch/mips/mips: pmap.c
        src/sys/arch/powerpc/booke: booke_pmap.c
        src/sys/arch/vax/vax: pmap.c
        src/sys/uvm: uvm_extern.h uvm_km.c

Log Message:
- bringing kmeminit_nkmempages back and revert pmaps that called this early
- use nkmempages to scale the kmem_arena
- reducing diff to pre kmem/vmem change
   (NKMEMPAGES_MAX_DEFAULT will need adjusting on some archs)


To generate a diff of this commit:
cvs rdiff -u -r1.256 -r1.257 src/sys/arch/alpha/alpha/pmap.c
cvs rdiff -u -r1.206 -r1.207 src/sys/arch/mips/mips/pmap.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/powerpc/booke/booke_pmap.c
cvs rdiff -u -r1.181 -r1.182 src/sys/arch/vax/vax/pmap.c
cvs rdiff -u -r1.180 -r1.181 src/sys/uvm/uvm_extern.h
cvs rdiff -u -r1.116 -r1.117 src/sys/uvm/uvm_km.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/alpha/alpha/pmap.c
diff -u src/sys/arch/alpha/alpha/pmap.c:1.256 src/sys/arch/alpha/alpha/pmap.c:1.257
--- src/sys/arch/alpha/alpha/pmap.c:1.256	Fri Jan 27 19:48:38 2012
+++ src/sys/arch/alpha/alpha/pmap.c	Thu Feb  2 18:59:44 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.256 2012/01/27 19:48:38 para Exp $ */
+/* $NetBSD: pmap.c,v 1.257 2012/02/02 18:59:44 para Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001, 2007, 2008 The NetBSD Foundation, Inc.
@@ -140,7 +140,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.256 2012/01/27 19:48:38 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.257 2012/02/02 18:59:44 para Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -757,6 +757,11 @@ pmap_bootstrap(paddr_t ptaddr, u_int max
 #endif
 
 	/*
+	 * Compute the number of pages kmem_arena will have.
+	 */
+	kmeminit_nkmempages();
+
+	/*
 	 * Figure out how many initial PTE's are necessary to map the
 	 * kernel.  We also reserve space for kmem_alloc_pageable()
 	 * for vm_fork().
@@ -769,7 +774,7 @@ pmap_bootstrap(paddr_t ptaddr, u_int max
 	lev3mapsize =
 		(VM_PHYS_SIZE + (ubc_nwins << ubc_winshift) +
 		 bufsz + 16 * NCARGS + pager_map_size) / PAGE_SIZE +
-		(maxproc * UPAGES) + (256 * 1024 * 1024) / PAGE_SIZE;
+		(maxproc * UPAGES) + nkmempages;
 
 #ifdef SYSVSHM
 	lev3mapsize += shminfo.shmall;

Index: src/sys/arch/mips/mips/pmap.c
diff -u src/sys/arch/mips/mips/pmap.c:1.206 src/sys/arch/mips/mips/pmap.c:1.207
--- src/sys/arch/mips/mips/pmap.c:1.206	Fri Jan 27 19:48:39 2012
+++ src/sys/arch/mips/mips/pmap.c	Thu Feb  2 18:59:44 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.206 2012/01/27 19:48:39 para Exp $	*/
+/*	$NetBSD: pmap.c,v 1.207 2012/02/02 18:59:44 para Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.206 2012/01/27 19:48:39 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.207 2012/02/02 18:59:44 para Exp $");
 
 /*
  *	Manages physical address maps.
@@ -496,6 +496,11 @@ pmap_bootstrap(void)
 	pmap_tlb_info_init(&pmap_tlb0_info);		/* init the lock */
 
 	/*
+	 * Compute the number of pages kmem_arena will have.
+	 */
+	kmeminit_nkmempages();
+
+	/*
 	 * Figure out how many PTE's are necessary to map the kernel.
 	 * We also reserve space for kmem_alloc_pageable() for vm_fork().
 	 */
@@ -507,7 +512,7 @@ pmap_bootstrap(void)
 
 	Sysmapsize = (VM_PHYS_SIZE + (ubc_nwins << ubc_winshift) +
 	    bufsz + 16 * NCARGS + pager_map_size + iospace_size) / NBPG +
-	    (maxproc * UPAGES) + 1024 * 1024;
+	    (maxproc * UPAGES) + nkmempages;
 #ifdef DEBUG
 	{
 		extern int kmem_guard_depth;

Index: src/sys/arch/powerpc/booke/booke_pmap.c
diff -u src/sys/arch/powerpc/booke/booke_pmap.c:1.11 src/sys/arch/powerpc/booke/booke_pmap.c:1.12
--- src/sys/arch/powerpc/booke/booke_pmap.c:1.11	Fri Jan 27 19:48:39 2012
+++ src/sys/arch/powerpc/booke/booke_pmap.c	Thu Feb  2 18:59:44 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: booke_pmap.c,v 1.11 2012/01/27 19:48:39 para Exp $	*/
+/*	$NetBSD: booke_pmap.c,v 1.12 2012/02/02 18:59:44 para Exp $	*/
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.11 2012/01/27 19:48:39 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.12 2012/02/02 18:59:44 para Exp $");
 
 #include <sys/param.h>
 #include <sys/kcore.h>
@@ -146,6 +146,11 @@ pmap_bootstrap(vaddr_t startkernel, vadd
 	pmap_tlb_info_init(&pmap_tlb0_info);		/* init the lock */
 
 	/*
+	 * Compute the number of pages kmem_arena will have.
+	 */
+	kmeminit_nkmempages();
+
+	/*
 	 * Figure out how many PTE's are necessary to map the kernel.
 	 * We also reserve space for kmem_alloc_pageable() for vm_fork().
 	 */
@@ -164,7 +169,7 @@ pmap_bootstrap(vaddr_t startkernel, vadd
 #ifdef SYSVSHM
 	    + NBPG * shminfo.shmall
 #endif
-	    + NBPG * 32 * 1024);
+	    + NBPG * nkmempages);
 
 	/*
 	 * Initialize `FYI' variables.	Note we're relying on

Index: src/sys/arch/vax/vax/pmap.c
diff -u src/sys/arch/vax/vax/pmap.c:1.181 src/sys/arch/vax/vax/pmap.c:1.182
--- src/sys/arch/vax/vax/pmap.c:1.181	Thu Feb  2 14:30:13 2012
+++ src/sys/arch/vax/vax/pmap.c	Thu Feb  2 18:59:44 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.181 2012/02/02 14:30:13 matt Exp $	   */
+/*	$NetBSD: pmap.c,v 1.182 2012/02/02 18:59:44 para Exp $	   */
 /*
  * Copyright (c) 1994, 1998, 1999, 2003 Ludd, University of Lule}, Sweden.
  * All rights reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.181 2012/02/02 14:30:13 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.182 2012/02/02 18:59:44 para Exp $");
 
 #include "opt_ddb.h"
 #include "opt_cputype.h"
@@ -224,12 +224,19 @@ calc_kvmsize(vsize_t usrptsize)
 {
 	vsize_t kvmsize, bufsz;
 
+	/*
+	 * Compute the number of pages kmem_arena will have.
+	 */
+	kmeminit_nkmempages();
+
 	/* All physical memory */
 	kvmsize = avail_end;
 	/* User Page table area. This may be large */
 	kvmsize += (usrptsize * sizeof(struct pte));
 	/* Kernel stacks per process */
 	kvmsize += (USPACE * maxproc);
+	/* kernel malloc arena */
+	kvmsize += nkmempages * PAGE_SIZE;
 	/* IO device register space */
 	kvmsize += (IOSPSZ * VAX_NBPG);
 	/* Pager allocations */

Index: src/sys/uvm/uvm_extern.h
diff -u src/sys/uvm/uvm_extern.h:1.180 src/sys/uvm/uvm_extern.h:1.181
--- src/sys/uvm/uvm_extern.h:1.180	Fri Jan 27 19:48:41 2012
+++ src/sys/uvm/uvm_extern.h	Thu Feb  2 18:59:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_extern.h,v 1.180 2012/01/27 19:48:41 para Exp $	*/
+/*	$NetBSD: uvm_extern.h,v 1.181 2012/02/02 18:59:45 para Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -749,8 +749,9 @@ bool			uvn_clean_p(struct uvm_object *);
 bool			uvn_needs_writefault_p(struct uvm_object *);
 
 /* kern_malloc.c */
-void			kmeminit(void);
 void			kmeminit_nkmempages(void);
+void			kmeminit(void);
+extern int		nkmempages;
 
 #endif /* _KERNEL */
 

Index: src/sys/uvm/uvm_km.c
diff -u src/sys/uvm/uvm_km.c:1.116 src/sys/uvm/uvm_km.c:1.117
--- src/sys/uvm/uvm_km.c:1.116	Wed Feb  1 23:43:49 2012
+++ src/sys/uvm/uvm_km.c	Thu Feb  2 18:59:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_km.c,v 1.116 2012/02/01 23:43:49 para Exp $	*/
+/*	$NetBSD: uvm_km.c,v 1.117 2012/02/02 18:59:45 para Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -120,10 +120,29 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.116 2012/02/01 23:43:49 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.117 2012/02/02 18:59:45 para Exp $");
 
 #include "opt_uvmhist.h"
 
+#include "opt_kmempages.h"
+
+#ifndef NKMEMPAGES
+#define NKMEMPAGES 0
+#endif
+
+/*
+ * Defaults for lower and upper-bounds for the kmem_arena page count.
+ * Can be overridden by kernel config options.
+ */
+#ifndef NKMEMPAGES_MIN
+#define NKMEMPAGES_MIN NKMEMPAGES_MIN_DEFAULT
+#endif
+
+#ifndef NKMEMPAGES_MAX
+#define NKMEMPAGES_MAX NKMEMPAGES_MAX_DEFAULT
+#endif
+
+
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
@@ -147,6 +166,7 @@ static struct vm_map		kernel_map_store;
 static struct vm_map_entry	kernel_image_mapent_store;
 static struct vm_map_entry	kernel_kmem_mapent_store;
 
+int nkmempages = 0;
 vaddr_t kmembase;
 vsize_t kmemsize;
 
@@ -154,6 +174,33 @@ vmem_t *kmem_arena;
 vmem_t *kmem_va_arena;
 
 /*
+ * kmeminit_nkmempages: calculate the size of kmem_arena.
+ */
+void
+kmeminit_nkmempages(void)
+{
+	int npages;
+
+	if (nkmempages != 0) {
+		/*
+		 * It's already been set (by us being here before)
+		 * bail out now;
+		 */
+		return;
+	}
+
+	npages = physmem;
+
+	if (npages > NKMEMPAGES_MAX)
+		npages = NKMEMPAGES_MAX;
+
+	if (npages < NKMEMPAGES_MIN)
+		npages = NKMEMPAGES_MIN;
+
+	nkmempages = npages;
+}
+
+/*
  * uvm_km_bootstrap: init kernel maps and objects to reflect reality (i.e.
  * KVM already allocated for text, data, bss, and static data structures).
  *
@@ -167,9 +214,12 @@ uvm_km_bootstrap(vaddr_t start, vaddr_t 
 {
 	vaddr_t base = VM_MIN_KERNEL_ADDRESS;
 
-	kmemsize = MIN((((vsize_t)(end - start)) / 3),
+	kmeminit_nkmempages();
+	kmemsize = nkmempages * PAGE_SIZE;
+
+	/* kmemsize = MIN((((vsize_t)(end - start)) / 3),
 	    ((((vsize_t)uvmexp.npages) * PAGE_SIZE) / 2));
-	kmemsize = round_page(kmemsize);
+	kmemsize = round_page(kmemsize); */
 
 	/*
 	 * next, init kernel memory objects.

Reply via email to