Module Name: src
Committed By: pooka
Date: Sat Apr 18 15:49:18 UTC 2015
Modified Files:
src/sys/rump/kern/lib/libsysproxy: sysproxy.c
src/sys/rump/librump/rumpkern: emul.c lwproc.c rump_private.h
rumpcopy.c signals.c vm.c
Log Message:
Give remote clients struct pmap storage. Although the pmap is unused,
that way we can sure that the pmap macro framework doesn't access all
the wrong places.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/rump/kern/lib/libsysproxy/sysproxy.c
cvs rdiff -u -r1.169 -r1.170 src/sys/rump/librump/rumpkern/emul.c
cvs rdiff -u -r1.34 -r1.35 src/sys/rump/librump/rumpkern/lwproc.c
cvs rdiff -u -r1.90 -r1.91 src/sys/rump/librump/rumpkern/rump_private.h
cvs rdiff -u -r1.19 -r1.20 src/sys/rump/librump/rumpkern/rumpcopy.c
cvs rdiff -u -r1.14 -r1.15 src/sys/rump/librump/rumpkern/signals.c
cvs rdiff -u -r1.165 -r1.166 src/sys/rump/librump/rumpkern/vm.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/rump/kern/lib/libsysproxy/sysproxy.c
diff -u src/sys/rump/kern/lib/libsysproxy/sysproxy.c:1.2 src/sys/rump/kern/lib/libsysproxy/sysproxy.c:1.3
--- src/sys/rump/kern/lib/libsysproxy/sysproxy.c:1.2 Fri Apr 3 16:40:55 2015
+++ src/sys/rump/kern/lib/libsysproxy/sysproxy.c Sat Apr 18 15:49:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: sysproxy.c,v 1.2 2015/04/03 16:40:55 pooka Exp $ */
+/* $NetBSD: sysproxy.c,v 1.3 2015/04/18 15:49:18 pooka Exp $ */
/*
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysproxy.c,v 1.2 2015/04/03 16:40:55 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysproxy.c,v 1.3 2015/04/18 15:49:18 pooka Exp $");
#include <sys/param.h>
#include <sys/filedesc.h>
@@ -76,9 +76,12 @@ hyp_syscall(int num, void *arg, long *re
return rv;
}
+static struct pmap remotepmap;
+
static int
hyp_rfork(void *priv, int flags, const char *comm)
{
+ struct rump_spctl *spctl;
struct vmspace *vm;
struct proc *p;
struct lwp *l;
@@ -97,10 +100,12 @@ hyp_rfork(void *priv, int flags, const c
}
/*
- * Since it's a proxy proc, we need create a vmspace for it.
+ * Since it's a proxy proc, we create a vmspace for it.
*/
- vm = kmem_zalloc(sizeof(*vm), KM_SLEEP);
- uvmspace_init(vm, priv, 0, 0, false);
+ spctl = kmem_zalloc(sizeof(*spctl), KM_SLEEP);
+ vm = &spctl->spctl_vm;
+ uvmspace_init(vm, &remotepmap, 0, 0, false);
+ spctl->spctl = priv;
if ((error = rump_lwproc_rfork_vmspace(vm, flags)) != 0) {
kmem_free(vm, sizeof(*vm));
Index: src/sys/rump/librump/rumpkern/emul.c
diff -u src/sys/rump/librump/rumpkern/emul.c:1.169 src/sys/rump/librump/rumpkern/emul.c:1.170
--- src/sys/rump/librump/rumpkern/emul.c:1.169 Sat Jan 3 17:23:51 2015
+++ src/sys/rump/librump/rumpkern/emul.c Sat Apr 18 15:49:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: emul.c,v 1.169 2015/01/03 17:23:51 pooka Exp $ */
+/* $NetBSD: emul.c,v 1.170 2015/04/18 15:49:18 pooka Exp $ */
/*
* Copyright (c) 2007-2011 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: emul.c,v 1.169 2015/01/03 17:23:51 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: emul.c,v 1.170 2015/04/18 15:49:18 pooka Exp $");
#include <sys/param.h>
#include <sys/null.h>
@@ -362,7 +362,7 @@ cpu_reboot(int howto, char *bootstr)
printf("rump kernel halting...\n");
if (!RUMP_LOCALPROC_P(curproc))
- finiarg = curproc->p_vmspace->vm_map.pmap;
+ finiarg = RUMP_SPVM2CTL(curproc->p_vmspace);
else
finiarg = NULL;
Index: src/sys/rump/librump/rumpkern/lwproc.c
diff -u src/sys/rump/librump/rumpkern/lwproc.c:1.34 src/sys/rump/librump/rumpkern/lwproc.c:1.35
--- src/sys/rump/librump/rumpkern/lwproc.c:1.34 Fri Apr 17 13:03:38 2015
+++ src/sys/rump/librump/rumpkern/lwproc.c Sat Apr 18 15:49:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: lwproc.c,v 1.34 2015/04/17 13:03:38 pooka Exp $ */
+/* $NetBSD: lwproc.c,v 1.35 2015/04/18 15:49:18 pooka Exp $ */
/*
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -28,7 +28,7 @@
#define RUMP__CURLWP_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.34 2015/04/17 13:03:38 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.35 2015/04/18 15:49:18 pooka Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -132,8 +132,9 @@ lwproc_proc_free(struct proc *p)
/* non-local vmspaces are not shared */
if (!RUMP_LOCALPROC_P(p)) {
+ struct rump_spctl *ctl = (struct rump_spctl *)p->p_vmspace;
KASSERT(p->p_vmspace->vm_refcnt == 1);
- kmem_free(p->p_vmspace, sizeof(*p->p_vmspace));
+ kmem_free(ctl, sizeof(*ctl));
}
proc_free_mem(p);
Index: src/sys/rump/librump/rumpkern/rump_private.h
diff -u src/sys/rump/librump/rumpkern/rump_private.h:1.90 src/sys/rump/librump/rumpkern/rump_private.h:1.91
--- src/sys/rump/librump/rumpkern/rump_private.h:1.90 Fri Apr 17 12:43:16 2015
+++ src/sys/rump/librump/rumpkern/rump_private.h Sat Apr 18 15:49:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rump_private.h,v 1.90 2015/04/17 12:43:16 pooka Exp $ */
+/* $NetBSD: rump_private.h,v 1.91 2015/04/18 15:49:18 pooka Exp $ */
/*
* Copyright (c) 2007-2011 Antti Kantee. All Rights Reserved.
@@ -122,6 +122,13 @@ extern struct pmap rump_pmap_local;
#define RUMP_LOCALPROC_P(p) \
(p->p_vmspace == vmspace_kernel() || p->p_vmspace == rump_vmspace_local)
+/* vm bundle for remote clients. the last member is the hypercall cookie */
+struct rump_spctl {
+ struct vmspace spctl_vm;
+ void *spctl;
+};
+#define RUMP_SPVM2CTL(vm) (((struct rump_spctl *)vm)->spctl)
+
void rump_component_load(const struct rump_component *);
void rump_component_init(enum rump_component_type);
int rump_component_count(enum rump_component_type);
Index: src/sys/rump/librump/rumpkern/rumpcopy.c
diff -u src/sys/rump/librump/rumpkern/rumpcopy.c:1.19 src/sys/rump/librump/rumpkern/rumpcopy.c:1.20
--- src/sys/rump/librump/rumpkern/rumpcopy.c:1.19 Sat Jan 3 17:23:51 2015
+++ src/sys/rump/librump/rumpkern/rumpcopy.c Sat Apr 18 15:49:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpcopy.c,v 1.19 2015/01/03 17:23:51 pooka Exp $ */
+/* $NetBSD: rumpcopy.c,v 1.20 2015/04/18 15:49:18 pooka Exp $ */
/*
* Copyright (c) 2009 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpcopy.c,v 1.19 2015/01/03 17:23:51 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpcopy.c,v 1.20 2015/04/18 15:49:18 pooka Exp $");
#include <sys/param.h>
#include <sys/lwp.h>
@@ -49,7 +49,7 @@ copyin(const void *uaddr, void *kaddr, s
if (RUMP_LOCALPROC_P(curproc)) {
memcpy(kaddr, uaddr, len);
} else if (len) {
- error = rump_sysproxy_copyin(curproc->p_vmspace->vm_map.pmap,
+ error = rump_sysproxy_copyin(RUMP_SPVM2CTL(curproc->p_vmspace),
uaddr, kaddr, len);
}
@@ -68,7 +68,7 @@ copyout(const void *kaddr, void *uaddr,
if (RUMP_LOCALPROC_P(curproc)) {
memcpy(uaddr, kaddr, len);
} else if (len) {
- error = rump_sysproxy_copyout(curproc->p_vmspace->vm_map.pmap,
+ error = rump_sysproxy_copyout(RUMP_SPVM2CTL(curproc->p_vmspace),
kaddr, uaddr, len);
}
return error;
@@ -82,7 +82,7 @@ subyte(void *uaddr, int byte)
if (RUMP_LOCALPROC_P(curproc))
*(char *)uaddr = byte;
else
- error = rump_sysproxy_copyout(curproc->p_vmspace->vm_map.pmap,
+ error = rump_sysproxy_copyout(RUMP_SPVM2CTL(curproc->p_vmspace),
&byte, uaddr, 1);
return error;
@@ -122,7 +122,7 @@ copyinstr(const void *uaddr, void *kaddr
if (RUMP_LOCALPROC_P(curproc))
return copystr(uaddr, kaddr, len, done);
- if ((rv = rump_sysproxy_copyinstr(curproc->p_vmspace->vm_map.pmap,
+ if ((rv = rump_sysproxy_copyinstr(RUMP_SPVM2CTL(curproc->p_vmspace),
uaddr, kaddr, &len)) != 0)
return rv;
@@ -159,7 +159,7 @@ copyoutstr(const void *kaddr, void *uadd
if (slen > len)
return ENAMETOOLONG;
- error = rump_sysproxy_copyoutstr(curproc->p_vmspace->vm_map.pmap,
+ error = rump_sysproxy_copyoutstr(RUMP_SPVM2CTL(curproc->p_vmspace),
kaddr, uaddr, &slen);
if (done)
*done = slen;
@@ -194,11 +194,11 @@ uvm_io(struct vm_map *vm, struct uio *ui
continue;
if (uio->uio_rw == UIO_READ) {
- error = rump_sysproxy_copyin(vm->pmap,
+ error = rump_sysproxy_copyin(RUMP_SPVM2CTL(vm),
(void *)(vaddr_t)uio->uio_offset, iov->iov_base,
curlen);
} else {
- error = rump_sysproxy_copyout(vm->pmap,
+ error = rump_sysproxy_copyout(RUMP_SPVM2CTL(vm),
iov->iov_base, (void *)(vaddr_t)uio->uio_offset,
curlen);
}
Index: src/sys/rump/librump/rumpkern/signals.c
diff -u src/sys/rump/librump/rumpkern/signals.c:1.14 src/sys/rump/librump/rumpkern/signals.c:1.15
--- src/sys/rump/librump/rumpkern/signals.c:1.14 Sat Jan 3 17:23:51 2015
+++ src/sys/rump/librump/rumpkern/signals.c Sat Apr 18 15:49:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: signals.c,v 1.14 2015/01/03 17:23:51 pooka Exp $ */
+/* $NetBSD: signals.c,v 1.15 2015/04/18 15:49:18 pooka Exp $ */
/*-
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: signals.c,v 1.14 2015/01/03 17:23:51 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: signals.c,v 1.15 2015/04/18 15:49:18 pooka Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -93,7 +93,7 @@ rumpsig_raise(struct proc *p, int signo)
if (RUMP_LOCALPROC_P(p)) {
rumpuser_kill(p->p_pid, signo);
} else {
- rump_sysproxy_raise(p->p_vmspace->vm_map.pmap, signo);
+ rump_sysproxy_raise(RUMP_SPVM2CTL(p->p_vmspace), signo);
}
}
Index: src/sys/rump/librump/rumpkern/vm.c
diff -u src/sys/rump/librump/rumpkern/vm.c:1.165 src/sys/rump/librump/rumpkern/vm.c:1.166
--- src/sys/rump/librump/rumpkern/vm.c:1.165 Fri Apr 17 12:46:33 2015
+++ src/sys/rump/librump/rumpkern/vm.c Sat Apr 18 15:49:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: vm.c,v 1.165 2015/04/17 12:46:33 pooka Exp $ */
+/* $NetBSD: vm.c,v 1.166 2015/04/18 15:49:18 pooka Exp $ */
/*
* Copyright (c) 2007-2011 Antti Kantee. All Rights Reserved.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.165 2015/04/17 12:46:33 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.166 2015/04/18 15:49:18 pooka Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -457,7 +457,7 @@ uvm_mmap_anon(struct proc *p, void **add
if (RUMP_LOCALPROC_P(curproc)) {
error = rumpuser_anonmmap(NULL, size, 0, 0, addrp);
} else {
- error = rump_sysproxy_anonmmap(p->p_vmspace->vm_map.pmap,
+ error = rump_sysproxy_anonmmap(RUMP_SPVM2CTL(p->p_vmspace),
size, addrp);
}
return error;