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)
{