summaryrefslogtreecommitdiff
path: root/sys/kern
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/init_main.c47
1 files changed, 46 insertions, 1 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 9aa037efd9d..50eb1176215 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: init_main.c,v 1.35 1999/01/11 01:37:13 niklas Exp $ */
+/* $OpenBSD: init_main.c,v 1.36 1999/02/26 04:44:43 art Exp $ */
/* $NetBSD: init_main.c,v 1.84.4.1 1996/06/02 09:08:06 mrg Exp $ */
/*
@@ -89,6 +89,10 @@
#include <vm/vm.h>
#include <vm/vm_pageout.h>
+#if defined(UVM)
+#include <uvm/uvm.h>
+#endif
+
#include <net/if.h>
#include <net/raw_cb.h>
@@ -198,11 +202,15 @@ main(framep)
printf(copyright);
printf(copyright_openbsd);
+#if defined(UVM)
+ uvm_init();
+#else
vm_mem_init();
kmeminit();
#if defined(MACHINE_NEW_NONCONTIG)
vm_page_physrehash();
#endif
+#endif /* UVM */
disk_init(); /* must come before autoconfiguration */
tty_init(); /* initialise tty's */
cpu_startup();
@@ -254,19 +262,30 @@ main(framep)
limit0.pl_rlimit[RLIMIT_NOFILE].rlim_max = MIN(NOFILE_MAX,
(maxfiles - NOFILE > NOFILE) ? maxfiles - NOFILE : NOFILE);
limit0.pl_rlimit[RLIMIT_NPROC].rlim_cur = MAXUPRC;
+#if defined(UVM)
+ i = ptoa(uvmexp.free);
+#else
i = ptoa(cnt.v_free_count);
+#endif /* UVM */
limit0.pl_rlimit[RLIMIT_RSS].rlim_max = i;
limit0.pl_rlimit[RLIMIT_MEMLOCK].rlim_max = i;
limit0.pl_rlimit[RLIMIT_MEMLOCK].rlim_cur = i / 3;
limit0.p_refcnt = 1;
/* Allocate a prototype map so we have something to fork. */
+#if defined(UVM)
+ uvmspace_init(&vmspace0, pmap_kernel(), round_page(VM_MIN_ADDRESS),
+ trunc_page(VM_MAX_ADDRESS), TRUE);
+ p->p_vmspace = &vmspace0;
+#else
p->p_vmspace = &vmspace0;
vmspace0.vm_refcnt = 1;
pmap_pinit(&vmspace0.vm_pmap);
vm_map_init(&p->p_vmspace->vm_map, round_page(VM_MIN_ADDRESS),
trunc_page(VM_MAX_ADDRESS), TRUE);
vmspace0.vm_map.pmap = &vmspace0.vm_pmap;
+#endif /* UVM */
+
p->p_addr = proc0paddr; /* XXX */
/*
@@ -284,7 +303,11 @@ main(framep)
rqinit();
/* Configure virtual memory system, set vm rlimits. */
+#if defined(UVM)
+ uvm_init_limits(p);
+#else
vm_init_limits(p);
+#endif
/* Initialize the file systems. */
#if defined(NFSSERVER) || defined(NFSCLIENT)
@@ -364,7 +387,11 @@ main(framep)
VREF(filedesc0.fd_fd.fd_cdir);
VOP_UNLOCK(rootvnode, 0, p);
filedesc0.fd_fd.fd_rdir = NULL;
+#if defined(UVM)
+ uvm_swap_init();
+#else
swapinit();
+#endif
/*
* Now can look at time, having had a chance to verify the time
@@ -412,7 +439,11 @@ main(framep)
randompid = 1;
/* The scheduler is an infinite loop. */
+#if defined(UVM)
+ uvm_scheduler();
+#else
scheduler();
+#endif
/* NOTREACHED */
}
@@ -486,9 +517,19 @@ start_init(arg)
* Need just enough stack to hold the faked-up "execve()" arguments.
*/
addr = USRSTACK - PAGE_SIZE;
+#if defined(UVM)
+ if (uvm_map(&p->p_vmspace->vm_map, &addr, PAGE_SIZE,
+ NULL, UVM_UNKNOWN_OFFSET,
+ UVM_MAPFLAG(UVM_PROT_ALL, UVM_PROT_ALL, UVM_INH_COPY,
+ UVM_ADV_NORMAL,
+ UVM_FLAG_FIXED|UVM_FLAG_OVERLAY|UVM_FLAG_COPYONW))
+ != KERN_SUCCESS)
+ panic("init: couldn't allocate argument space");
+#else
if (vm_allocate(&p->p_vmspace->vm_map, &addr, (vm_size_t)PAGE_SIZE,
FALSE) != 0)
panic("init: couldn't allocate argument space");
+#endif
p->p_vmspace->vm_maxsaddr = (caddr_t)addr;
for (pathp = &initpaths[0]; (path = *pathp) != NULL; pathp++) {
@@ -568,7 +609,11 @@ void
start_pagedaemon(arg)
void *arg;
{
+#if defined(UVM)
+ uvm_pageout();
+#else
vm_pageout();
+#endif
/* NOTREACHED */
}