b0bfbf33ac
threads blocking in the kernel automatically exit when the process exists. However, for the sysproxy case this does not hold. Typically it's ~harmless, but e.g. in the case of socket binding following by poll it gets annoying. Introduce sysproxy procexit, which wakes up all threads blocking on a condition when a process's communication socket is closed. The code is a little different from the regular kernel simply because in a rump kernel l_mutex is not available at all times (this is because scheduling happens on every kernel entry and exit, and that path must be kept lockless for any reasonable performance). Instead, use gating which makes sure all threads are either out of the cv code or suspended in a well-known state. Then, wake up the threads and tell them to get the hell out of our galaxy. |
||
---|---|---|
.. | ||
dev | ||
fs | ||
include | ||
kern | ||
librump | ||
net | ||
ldscript.rump | ||
Makefile | ||
Makefile.rump | ||
README.dirs | ||
TODO |
$NetBSD: README.dirs,v 1.11 2010/05/11 11:58:14 pooka Exp $ The following is a quick rundown of the current directory structure. First, components in the kernel namespace, i.e. compiled with -D_KERNEL sys/rump/librump - kernel runtime emulation /rumpkern - kernel core, e.g. syscall, interrupt and lock support /rumpcrypto - kernel cryptographic routines /rumpdev - device support, e.g. autoconf subsystem /rumpnet - networking support and sockets layer /rumpvfs - file system support sys/rump/include /machine - used for architectures where the rump ABI is not yet the same as the kernel module ABI. will eventually disappear completely /rump - rump headers installed to userspace sys/rump/dev - device components, e.g. audio, raidframe, usb drivers sys/rump/fs - file system components /lib/lib${fs} - kernel file system code sys/rump/net - networking components /lib/libnet - subroutines from sys/net, e.g. route and if_ethersubr /lib/libnetinet - TCP/IP /lib/libvirtif - a virtual interface which uses host tap(4) to shovel packets. This is used by netinet and if_ethersubr. /lib/libsockin - implements PF_INET using host kernel sockets. This is mutually exclusive with net, netinet and virtif. The rest are out-of-kernel components (i.e. no -D_KERNEL) related to rump. hypercall interface: src/lib/librumpuser The "rumpuser" set of interfaces is used by rump to communicate with the host. Users: src/lib /libp2k - puffs-to-vfs adaption layer, userspace namespace /libukfs - user kernel file system, a library to access file system images (or devices) directly in userspace without going through a system call and puffs. It provides a slightly higher interface than pure rump syscalls. src/usr.sbin/puffs rump_$fs - userspace file system daemons using the kernel fs code src/share/examples/rump Various examples detailing use of rump in different scenarios. These are provided source-only.