summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_malloc.c5
-rw-r--r--sys/kern/subr_param.c42
-rw-r--r--sys/sys/systm.h1
3 files changed, 22 insertions, 26 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index 2d8daa3103ae..a90d628f77a2 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -445,6 +445,11 @@ kmeminit(dummy)
vm_kmem_size = 2 * cnt.v_page_count * PAGE_SIZE;
/*
+ * Tune settings based on the kernel map's size at this time.
+ */
+ init_param3(vm_kmem_size / PAGE_SIZE);
+
+ /*
* In mbuf_init(), we set up submaps for mbufs and clusters, in which
* case we rounddown() (nmbufs * MSIZE) and (nmbclusters * MCLBYTES),
* respectively. Mathematically, this means that what we do here may
diff --git a/sys/kern/subr_param.c b/sys/kern/subr_param.c
index 427a94a9639a..0482aa935421 100644
--- a/sys/kern/subr_param.c
+++ b/sys/kern/subr_param.c
@@ -135,23 +135,6 @@ void
init_param2(long physpages)
{
- /* Kernel map size */
- int kmempages, kmemtunable;
- kmempages = VM_KMEM_SIZE / PAGE_SIZE;
-#if defined(VM_KMEM_SIZE_SCALE)
- if ((physpages / VM_KMEM_SIZE_SCALE) > kmempages)
- kmempages = (physpages / VM_KMEM_SIZE_SCALE);
-#endif
-
-#if defined(VM_KMEM_SIZE_MAX)
- if (kmempages * PAGE_SIZE >= VM_KMEM_SIZE_MAX)
- kmempages = VM_KMEM_SIZE_MAX / PAGE_SIZE;
-#endif
- kmemtunable = 0;
- TUNABLE_INT_FETCH("kern.vm.kmem.size", &kmemtunable);
- if (kmemtunable != 0)
- kmempages = kmemtunable / PAGE_SIZE;
- kmempages = min(physpages, kmempages);
/* Base parameters */
maxusers = MAXUSERS;
TUNABLE_INT_FETCH("kern.maxusers", &maxusers);
@@ -179,7 +162,23 @@ init_param2(long physpages)
TUNABLE_INT_FETCH("kern.maxfiles", &maxfiles);
maxprocperuid = (maxproc * 9) / 10;
maxfilesperproc = (maxfiles * 9) / 10;
+
+ /*
+ * Cannot be changed after boot.
+ */
+ nbuf = NBUF;
+ TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
+
+ ncallout = 16 + maxproc + maxfiles;
+ TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
+}
+/*
+ * Boot time overrides that are scaled against the kernel map
+ */
+void
+init_param3(long kmempages)
+{
/*
* Limit number of pipes to a reasonable fraction of kmap entries,
* pageable pipe memory usage to 2.5% of the kernel map, and wired
@@ -196,13 +195,4 @@ init_param2(long physpages)
maxpipekva = 512 * 1024;
if (maxpipekvawired < 512 * 1024)
maxpipekvawired = 512 * 1024;
-
- /*
- * Cannot be changed after boot.
- */
- nbuf = NBUF;
- TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
-
- ncallout = 16 + maxproc + maxfiles;
- TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
}
diff --git a/sys/sys/systm.h b/sys/sys/systm.h
index 04d54cd15f42..0f7889f16024 100644
--- a/sys/sys/systm.h
+++ b/sys/sys/systm.h
@@ -147,6 +147,7 @@ void critical_enter(void);
void critical_exit(void);
void init_param1(void);
void init_param2(long physpages);
+void init_param3(long kmempages);
void tablefull(const char *);
int kvprintf(char const *, void (*)(int, void*), void *, int,
__va_list) __printflike(1, 0);