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;

Reply via email to