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