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.