Module Name:    src
Committed By:   pooka
Date:           Thu Jun 10 21:40:42 UTC 2010

Modified Files:
        src/sys/rump/librump/rumpkern: Makefile.rumpkern emul.c rump.c
            rump_private.h rumpcopy.c signals.c vm.c

Log Message:
Use kern_proc.c instead of a collection of stubs.  But what we
really wanted from this commit was the support for proc_specificdata.

TODO: make creating a new process actually use kern_proc and
maybe even add an interface which starts a process with
"any pid you don't like"


To generate a diff of this commit:
cvs rdiff -u -r1.88 -r1.89 src/sys/rump/librump/rumpkern/Makefile.rumpkern
cvs rdiff -u -r1.137 -r1.138 src/sys/rump/librump/rumpkern/emul.c
cvs rdiff -u -r1.177 -r1.178 src/sys/rump/librump/rumpkern/rump.c
cvs rdiff -u -r1.50 -r1.51 src/sys/rump/librump/rumpkern/rump_private.h
cvs rdiff -u -r1.2 -r1.3 src/sys/rump/librump/rumpkern/rumpcopy.c \
    src/sys/rump/librump/rumpkern/signals.c
cvs rdiff -u -r1.82 -r1.83 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/librump/rumpkern/Makefile.rumpkern
diff -u src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.88 src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.89
--- src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.88	Sun Jun  6 20:09:38 2010
+++ src/sys/rump/librump/rumpkern/Makefile.rumpkern	Thu Jun 10 21:40:42 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.rumpkern,v 1.88 2010/06/06 20:09:38 njoly Exp $
+#	$NetBSD: Makefile.rumpkern,v 1.89 2010/06/10 21:40:42 pooka Exp $
 #
 
 .include "${RUMPTOP}/Makefile.rump"
@@ -47,9 +47,9 @@
 # sys/kern
 SRCS+=	init_sysctl_base.c kern_auth.c kern_descrip.c kern_event.c	\
 	kern_hook.c kern_ksyms.c kern_malloc_stdtype.c kern_module.c	\
-	kern_mutex_obj.c kern_ntptime.c kern_rate.c kern_resource.c	\
-	kern_stub.c kern_syscall.c kern_sysctl.c kern_tc.c		\
-	kern_timeout.c kern_uidinfo.c param.c sys_descrip.c		\
+	kern_mutex_obj.c kern_ntptime.c kern_proc.c kern_rate.c		\
+	kern_resource.c kern_stub.c kern_syscall.c kern_sysctl.c	\
+	kern_tc.c kern_timeout.c kern_uidinfo.c param.c sys_descrip.c	\
 	sys_generic.c sys_module.c sys_pipe.c sys_select.c syscalls.c
 
 # sys/kern subr (misc)

Index: src/sys/rump/librump/rumpkern/emul.c
diff -u src/sys/rump/librump/rumpkern/emul.c:1.137 src/sys/rump/librump/rumpkern/emul.c:1.138
--- src/sys/rump/librump/rumpkern/emul.c:1.137	Tue May 11 20:25:14 2010
+++ src/sys/rump/librump/rumpkern/emul.c	Thu Jun 10 21:40:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: emul.c,v 1.137 2010/05/11 20:25:14 pooka Exp $	*/
+/*	$NetBSD: emul.c,v 1.138 2010/06/10 21:40:42 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: emul.c,v 1.137 2010/05/11 20:25:14 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: emul.c,v 1.138 2010/06/10 21:40:42 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/null.h>
@@ -42,7 +42,6 @@
 #include <sys/device.h>
 #include <sys/queue.h>
 #include <sys/file.h>
-#include <sys/filedesc.h>
 #include <sys/cpu.h>
 #include <sys/kmem.h>
 #include <sys/poll.h>
@@ -62,7 +61,6 @@
 
 #include "rump_private.h"
 
-kmutex_t *proc_lock;
 struct lwp lwp0;
 struct vnode *rootvp;
 dev_t rootdev = NODEV;
@@ -114,28 +112,12 @@
 	.e_name = "netbsd-rump",
 	.e_sysent = rump_sysent,
 	.e_vm_default_addr = uvm_default_mapaddr,
+#ifdef __HAVE_SYSCALL_INTERN
+	.e_syscall_intern = syscall_intern,
+#endif
 };
 
-struct proc *
-p_find(pid_t pid, uint flags)
-{
-
-	panic("%s: not implemented", __func__);
-}
-
-struct pgrp *
-pg_find(pid_t pid, uint flags)
-{
-
-	panic("%s: not implemented", __func__);
-}
-
-int
-pgid_in_session(struct proc *p, pid_t pg_id)
-{
-
-	panic("%s: not implemented", __func__);
-}
+u_int nprocs = 1;
 
 int
 kpause(const char *wmesg, bool intr, int timeo, kmutex_t *mtx)
@@ -188,27 +170,6 @@
 	/* always sleepable, although we should improve this */
 }
 
-int
-proc_uidmatch(kauth_cred_t cred, kauth_cred_t target)
-{
-
-	panic("%s: not implemented", __func__);
-}
-
-void
-proc_crmod_enter(void)
-{
-
-	panic("%s: not implemented", __func__);
-}
-
-void
-proc_crmod_leave(kauth_cred_t c1, kauth_cred_t c2, bool sugid)
-{
-
-	panic("%s: not implemented", __func__);
-}
-
 void
 module_init_md(void)
 {
@@ -236,29 +197,6 @@
 }
 void (*delay_func)(unsigned int) = rump_delay;
 
-void
-proc_sesshold(struct session *ss)
-{
-
-	panic("proc_sesshold() impossible, session %p", ss);
-}
-
-void
-proc_sessrele(struct session *ss)
-{
-
-	panic("proc_sessrele() impossible, session %p", ss);
-}
-
-int
-proc_vmspace_getref(struct proc *p, struct vmspace **vm)
-{
-
-	/* XXX */
-	*vm = p->p_vmspace;
-	return 0;
-}
-
 int
 ttycheckoutq(struct tty *tp, int wait)
 {
@@ -298,3 +236,12 @@
 	/* this function is __dead, we must exit */
 	rumpuser_exit(0);
 }
+
+#ifdef __HAVE_SYSCALL_INTERN
+void
+syscall_intern(struct proc *p)
+{
+
+	/* no you don't */
+}
+#endif

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.177 src/sys/rump/librump/rumpkern/rump.c:1.178
--- src/sys/rump/librump/rumpkern/rump.c:1.177	Wed Jun  9 14:08:17 2010
+++ src/sys/rump/librump/rumpkern/rump.c	Thu Jun 10 21:40:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.177 2010/06/09 14:08:17 pooka Exp $	*/
+/*	$NetBSD: rump.c,v 1.178 2010/06/10 21:40:42 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.177 2010/06/09 14:08:17 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.178 2010/06/10 21:40:42 pooka Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -84,7 +84,7 @@
 #include "rump_vfs_private.h"
 #include "rump_dev_private.h"
 
-struct proc proc0;
+/* is this still necessary or use kern_proc stuff? */
 struct session rump_session = {
 	.s_count = 1,
 	.s_flags = 0,
@@ -97,10 +97,7 @@
 	.pg_session = &rump_session,
 	.pg_jobc = 1,
 };
-struct pstats rump_stats;
-struct plimit rump_limits;
-struct filedesc rump_filedesc0;
-struct proclist allproc;
+
 char machine[] = MACHINE;
 static kauth_cred_t rump_susercred;
 
@@ -204,7 +201,6 @@
 	char buf[256];
 	struct timespec ts;
 	uint64_t sec, nsec;
-	struct proc *p;
 	struct lwp *l;
 	int i, numcpu;
 	int error;
@@ -280,6 +276,7 @@
 	l = &lwp0;
 	l->l_lid = 1;
 	l->l_cpu = l->l_target_cpu = rump_cpu;
+	l->l_fd = &filedesc0;
 	rumpuser_set_curlwp(l);
 
 	mutex_init(&tty_lock, MUTEX_DEFAULT, IPL_NONE);
@@ -305,31 +302,14 @@
 	kauth_init();
 	rump_susercred = rump_cred_create(0, 0, 0, NULL);
 
-	/* init proc0 and rest of lwp0 now that we can allocate memory */
-	p = &proc0;
-	p->p_stats = &rump_stats;
-	p->p_limit = &rump_limits;
-	p->p_pgrp = &rump_pgrp;
-	p->p_pid = 0;
-	p->p_fd = &rump_filedesc0;
-	p->p_vmspace = &rump_vmspace;
-	p->p_emul = &emul_netbsd;
-	p->p_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
 	l->l_cred = rump_cred_suserget();
-	l->l_proc = p;
-	LIST_INIT(&allproc);
-	LIST_INSERT_HEAD(&allproc, &proc0, p_list);
-	proc_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
+	l->l_proc = &proc0;
 
+	procinit();
+	proc0_init();
 	lwpinit_specificdata();
 	lwp_initspecific(&lwp0);
 
-	mutex_init(&rump_limits.pl_lock, MUTEX_DEFAULT, IPL_NONE);
-	rump_limits.pl_rlimit[RLIMIT_FSIZE].rlim_cur = RLIM_INFINITY;
-	rump_limits.pl_rlimit[RLIMIT_NOFILE].rlim_cur = RLIM_INFINITY;
-	rump_limits.pl_rlimit[RLIMIT_SBSIZE].rlim_cur = RLIM_INFINITY;
-	rump_limits.pl_corename = defcorename;
-
 	rump_scheduler_init();
 	/* revert temporary context and schedule a real context */
 	l->l_cpu = NULL;
@@ -401,8 +381,6 @@
 
 	sigemptyset(&sigcantmask);
 
-	lwp0.l_fd = proc0.p_fd = fd_init(&rump_filedesc0);
-
 	if (rump_threads)
 		vmem_rehash_start();
 
@@ -536,15 +514,17 @@
 		p = kmem_zalloc(sizeof(*p), KM_SLEEP);
 		if (rump_proc_vfs_init)
 			rump_proc_vfs_init(p);
-		p->p_stats = &rump_stats;
-		p->p_limit = lim_copy(&rump_limits);
+		p->p_stats = proc0.p_stats; /* XXX */
+		p->p_limit = lim_copy(proc0.p_limit);
 		p->p_pid = pid;
-		p->p_vmspace = &rump_vmspace;
+		p->p_vmspace = &vmspace0;
 		p->p_emul = &emul_netbsd;
 		p->p_fd = fd_init(NULL);
 		p->p_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
 		p->p_pgrp = &rump_pgrp;
 		l->l_cred = rump_cred_suserget();
+
+		atomic_inc_uint(&nprocs);
 	} else {
 		p = &proc0;
 		l->l_cred = rump_susercred;
@@ -591,6 +571,8 @@
 		rump_cred_put(l->l_cred);
 		limfree(p->p_limit);
 		kmem_free(p, sizeof(*p));
+
+		atomic_dec_uint(&nprocs);
 	}
 	KASSERT((l->l_flag & LW_WEXIT) == 0);
 	l->l_flag |= LW_WEXIT;

Index: src/sys/rump/librump/rumpkern/rump_private.h
diff -u src/sys/rump/librump/rumpkern/rump_private.h:1.50 src/sys/rump/librump/rumpkern/rump_private.h:1.51
--- src/sys/rump/librump/rumpkern/rump_private.h:1.50	Thu Jun  3 10:56:20 2010
+++ src/sys/rump/librump/rumpkern/rump_private.h	Thu Jun 10 21:40:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump_private.h,v 1.50 2010/06/03 10:56:20 pooka Exp $	*/
+/*	$NetBSD: rump_private.h,v 1.51 2010/06/10 21:40:42 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -48,17 +48,18 @@
 #include "rumpkern_if_priv.h"
 
 extern kauth_cred_t rump_cred;
-extern struct vmspace rump_vmspace;
 
 extern struct rumpuser_mtx *rump_giantlock;
 
-#define UIO_VMSPACE_SYS (&rump_vmspace)
+#define UIO_VMSPACE_SYS (&vmspace0)
 
 extern int rump_threads;
 extern struct device rump_rootdev;
 
 extern struct sysent rump_sysent[];
 
+extern struct vmspace vmspace0;
+
 enum rump_component_type {
 	RUMP_COMPONENT_DEV,
 	RUMP_COMPONENT_NET, RUMP_COMPONENT_NET_ROUTE, RUMP_COMPONENT_NET_IF,

Index: src/sys/rump/librump/rumpkern/rumpcopy.c
diff -u src/sys/rump/librump/rumpkern/rumpcopy.c:1.2 src/sys/rump/librump/rumpkern/rumpcopy.c:1.3
--- src/sys/rump/librump/rumpkern/rumpcopy.c:1.2	Wed Nov  4 18:27:40 2009
+++ src/sys/rump/librump/rumpkern/rumpcopy.c	Thu Jun 10 21:40:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpcopy.c,v 1.2 2009/11/04 18:27:40 pooka Exp $	*/
+/*	$NetBSD: rumpcopy.c,v 1.3 2010/06/10 21:40:42 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.2 2009/11/04 18:27:40 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpcopy.c,v 1.3 2010/06/10 21:40:42 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/lwp.h>
@@ -40,7 +40,7 @@
 copyin(const void *uaddr, void *kaddr, size_t len)
 {
 
-	if (curproc->p_vmspace == &rump_vmspace)
+	if (curproc->p_vmspace == &vmspace0)
 		memcpy(kaddr, uaddr, len);
 	else
 		rump_sysproxy_copyin(uaddr, kaddr, len);
@@ -51,7 +51,7 @@
 copyout(const void *kaddr, void *uaddr, size_t len)
 {
 
-	if (curproc->p_vmspace == &rump_vmspace)
+	if (curproc->p_vmspace == &vmspace0)
 		memcpy(uaddr, kaddr, len);
 	else
 		rump_sysproxy_copyout(kaddr, uaddr, len);
@@ -62,7 +62,7 @@
 subyte(void *uaddr, int byte)
 {
 
-	if (curproc->p_vmspace == &rump_vmspace)
+	if (curproc->p_vmspace == &vmspace0)
 		*(char *)uaddr = byte;
 	else
 		rump_sysproxy_copyout(&byte, uaddr, 1);
@@ -80,7 +80,7 @@
 copyinstr(const void *uaddr, void *kaddr, size_t len, size_t *done)
 {
 
-	if (curproc->p_vmspace == &rump_vmspace)
+	if (curproc->p_vmspace == &vmspace0)
 		strlcpy(kaddr, uaddr, len);
 	else
 		rump_sysproxy_copyin(uaddr, kaddr, len);
@@ -93,7 +93,7 @@
 copyoutstr(const void *kaddr, void *uaddr, size_t len, size_t *done)
 {
 
-	if (curproc->p_vmspace == &rump_vmspace)
+	if (curproc->p_vmspace == &vmspace0)
 		strlcpy(uaddr, kaddr, len);
 	else
 		rump_sysproxy_copyout(kaddr, uaddr, len);
Index: src/sys/rump/librump/rumpkern/signals.c
diff -u src/sys/rump/librump/rumpkern/signals.c:1.2 src/sys/rump/librump/rumpkern/signals.c:1.3
--- src/sys/rump/librump/rumpkern/signals.c:1.2	Thu Apr 22 07:10:47 2010
+++ src/sys/rump/librump/rumpkern/signals.c	Thu Jun 10 21:40:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: signals.c,v 1.2 2010/04/22 07:10:47 pooka Exp $	*/
+/*	$NetBSD: signals.c,v 1.3 2010/06/10 21:40:42 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: signals.c,v 1.2 2010/04/22 07:10:47 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: signals.c,v 1.3 2010/06/10 21:40:42 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -181,3 +181,10 @@
 	if (!(CIRCLEQ_EMPTY(kq)))
 		panic("how did that get there?");
 }
+
+void
+siginit(struct proc *p)
+{
+
+	/* nada (?) */
+}

Index: src/sys/rump/librump/rumpkern/vm.c
diff -u src/sys/rump/librump/rumpkern/vm.c:1.82 src/sys/rump/librump/rumpkern/vm.c:1.83
--- src/sys/rump/librump/rumpkern/vm.c:1.82	Wed Jun  9 12:02:37 2010
+++ src/sys/rump/librump/rumpkern/vm.c	Thu Jun 10 21:40:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm.c,v 1.82 2010/06/09 12:02:37 pooka Exp $	*/
+/*	$NetBSD: vm.c,v 1.83 2010/06/10 21:40:42 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2010 Antti Kantee.  All Rights Reserved.
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.82 2010/06/09 12:02:37 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.83 2010/06/10 21:40:42 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -79,7 +79,6 @@
 struct uvmexp uvmexp;
 struct uvm uvm;
 
-struct vmspace rump_vmspace;
 struct vm_map rump_vmmap;
 static struct vm_map_kernel kmem_map_store;
 struct vm_map *kmem_map = &kmem_map_store.vmk_map;
@@ -238,7 +237,6 @@
 {
 
 	uvmexp.free = 1024*1024; /* XXX */
-	rump_vmspace.vm_map.pmap = pmap_kernel();
 
 	mutex_init(&pagermtx, MUTEX_DEFAULT, 0);
 	mutex_init(&uvm_pageqlock, MUTEX_DEFAULT, 0);
@@ -253,6 +251,13 @@
 	callback_head_init(&kmem_map_store.vmk_reclaim_callback, IPL_VM);
 }
 
+void
+uvmspace_init(struct vmspace *vm, struct pmap *pmap, vaddr_t vmin, vaddr_t vmax)
+{
+
+	vm->vm_map.pmap = pmap_kernel();
+	vm->vm_refcnt = 1;
+}
 
 void
 uvm_pagewire(struct vm_page *pg)
@@ -268,6 +273,21 @@
 	/* nada */
 }
 
+/* where's your schmonz now? */
+#define PUNLIMIT(a)	\
+p->p_rlimit[a].rlim_cur = p->p_rlimit[a].rlim_max = RLIM_INFINITY;
+void
+uvm_init_limits(struct proc *p)
+{
+
+	PUNLIMIT(RLIMIT_STACK);
+	PUNLIMIT(RLIMIT_DATA);
+	PUNLIMIT(RLIMIT_RSS);
+	PUNLIMIT(RLIMIT_AS);
+	/* nice, cascade */
+}
+#undef PUNLIMIT
+
 /*
  * This satisfies the "disgusting mmap hack" used by proplib.
  * We probably should grow some more assertables to make sure we're
@@ -634,7 +654,7 @@
 uvm_vslock(struct vmspace *vs, void *addr, size_t len, vm_prot_t access)
 {
 
-	KASSERT(vs == &rump_vmspace);
+	KASSERT(vs == &vmspace0);
 	return 0;
 }
 
@@ -642,7 +662,7 @@
 uvm_vsunlock(struct vmspace *vs, void *addr, size_t len)
 {
 
-	KASSERT(vs == &rump_vmspace);
+	KASSERT(vs == &vmspace0);
 }
 
 void
@@ -661,6 +681,16 @@
 }
 
 void
+uvmspace_addref(struct vmspace *vm)
+{
+
+	/*
+	 * there is only vmspace0.  we're not planning on
+	 * feeding it to the fishes.
+	 */
+}
+
+void
 uvmspace_free(struct vmspace *vm)
 {
 

Reply via email to