Index: sys/rump/kern/lib/libsysproxy/sysproxy.c =================================================================== RCS file: /cvsroot/src/sys/rump/kern/lib/libsysproxy/sysproxy.c,v retrieving revision 1.1 diff -p -u -r1.1 sysproxy.c --- sys/rump/kern/lib/libsysproxy/sysproxy.c 7 Jan 2015 22:24:04 -0000 1.1 +++ sys/rump/kern/lib/libsysproxy/sysproxy.c 29 Mar 2015 19:00:50 -0000 @@ -109,10 +109,10 @@ hyp_rfork(void *priv, int flags, const c * Since it's a proxy proc, adjust the vmspace. * Refcount will eternally be 1. */ + uvmspace_free(p->p_vmspace); newspace = kmem_zalloc(sizeof(*newspace), KM_SLEEP); newspace->vm_refcnt = 1; newspace->vm_map.pmap = priv; - KASSERT(p->p_vmspace == vmspace_kernel()); p->p_vmspace = newspace; if (comm) strlcpy(p->p_comm, comm, sizeof(p->p_comm)); Index: sys/rump/librump/rumpkern/lwproc.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpkern/lwproc.c,v retrieving revision 1.32 diff -p -u -r1.32 lwproc.c --- sys/rump/librump/rumpkern/lwproc.c 21 Jan 2015 14:39:37 -0000 1.32 +++ sys/rump/librump/rumpkern/lwproc.c 29 Mar 2015 19:00:50 -0000 @@ -176,7 +176,7 @@ lwproc_newproc(struct proc *parent, int p->p_stats = pstatscopy(parent->p_stats); - p->p_vmspace = vmspace_kernel(); + p->p_vmspace = uvmspace_fork(parent->p_vmspace); p->p_emul = emul_default; #ifdef __HAVE_SYSCALL_INTERN p->p_emul->e_syscall_intern(p); Index: sys/rump/librump/rumpkern/vm.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpkern/vm.c,v retrieving revision 1.161 diff -p -u -r1.161 vm.c --- sys/rump/librump/rumpkern/vm.c 3 Jan 2015 17:23:51 -0000 1.161 +++ sys/rump/librump/rumpkern/vm.c 29 Mar 2015 19:00:50 -0000 @@ -88,6 +88,9 @@ struct vm_map *kernel_map = &kernel_map_ static struct vm_map module_map_store; extern struct vm_map *module_map; +/* VM space for local users of the rump kernel. */ +static struct vmspace vmspace_local_user; + vmem_t *kmem_arena; vmem_t *kmem_va_arena; @@ -375,6 +378,11 @@ uvm_init(void) kernel_map->pmap = pmap_kernel(); + uvmspace_init(&vmspace_local_user, pmap_create(), + round_page(0), + trunc_page(UINTPTR_MAX), + true /* XXX topdown */); + pool_subsystem_init(); kmem_arena = vmem_create("kmem", 0, 1024*1024, PAGE_SIZE, @@ -396,10 +404,17 @@ uvmspace_init(struct vmspace *vm, struct bool topdown) { - vm->vm_map.pmap = pmap_kernel(); + vm->vm_map.pmap = pmap; vm->vm_refcnt = 1; } +struct vmspace * +uvmspace_fork(struct vmspace *parentvm __unused) +{ + + return &vmspace_local_user; +} + void uvm_pagewire(struct vm_page *pg) { Index: sys/rump/librump/rumpkern/arch/generic/rump_generic_pmap.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpkern/arch/generic/rump_generic_pmap.c,v retrieving revision 1.2 diff -p -u -r1.2 rump_generic_pmap.c --- sys/rump/librump/rumpkern/arch/generic/rump_generic_pmap.c 12 Feb 2014 22:30:45 -0000 1.2 +++ sys/rump/librump/rumpkern/arch/generic/rump_generic_pmap.c 29 Mar 2015 19:00:50 -0000 @@ -29,6 +29,7 @@ __KERNEL_RCSID(0, "$NetBSD: rump_generic_pmap.c,v 1.2 2014/02/12 22:30:45 pooka Exp $"); #include <sys/param.h> +#include <sys/kmem.h> #include <uvm/uvm_extern.h> @@ -39,6 +40,22 @@ __KERNEL_RCSID(0, "$NetBSD: rump_generic struct pmap *const kernel_pmap_ptr = (struct pmap *const)-1; +static struct pmap *const local_user_pmap_ptr = (struct pmap *const)-2; + +struct pmap * +pmap_create(void) +{ + + return local_user_pmap_ptr; +} + +void +pmap_destroy(struct pmap *pmap) +{ + + KASSERT(pmap == local_user_pmap_ptr); +} + void pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int fl) { Index: sys/rump/librump/rumpkern/arch/x86/rump_x86_pmap.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpkern/arch/x86/rump_x86_pmap.c,v retrieving revision 1.1 diff -p -u -r1.1 rump_x86_pmap.c --- sys/rump/librump/rumpkern/arch/x86/rump_x86_pmap.c 12 Feb 2014 22:28:43 -0000 1.1 +++ sys/rump/librump/rumpkern/arch/x86/rump_x86_pmap.c 29 Mar 2015 19:00:50 -0000 @@ -29,12 +29,29 @@ __KERNEL_RCSID(0, "$NetBSD: rump_x86_pmap.c,v 1.1 2014/02/12 22:28:43 pooka Exp $"); #include <sys/param.h> +#include <sys/kmem.h> #include <uvm/uvm_extern.h> static struct pmap thepmap; struct pmap *const kernel_pmap_ptr = &thepmap; +static struct pmap local_user_pmap; + +struct pmap * +pmap_create(void) +{ + + return &local_user_pmap; +} + +void +pmap_destroy(struct pmap *pmap) +{ + + KASSERT(pmap == &local_user_pmap); +} + void pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int fl) {