aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* trans/password: add a payload-aware intrans functionJustus Winter2014-12-071-0/+1
| | | | * trans/Makefile (password-MIGSFLAGS): Add mutator.
* trans/ifsock: add a payload-aware intrans functionJustus Winter2014-12-071-0/+1
| | | | * trans/Makefile (ifsock-MIGSFLAGS): Add mutator.
* trans/fakeroot: make the demuxer payload-awareJustus Winter2014-12-071-4/+13
| | | | * trans/fakeroot.c (netfs_demuxer): Make the demuxer payload-aware.
* term: add a payload-aware intrans functionJustus Winter2014-12-073-0/+10
| | | | * term/mig-mutate.h: Add mutator.
* startup: disable default payload to port mappingJustus Winter2014-12-071-0/+4
| | | | | | | | startup does not use libports. Therefor, it is not necessary to use the default payload to port translation function. * startup/Makefile (MIGSFLAGS): Disable the default payload to port translation function.
* proc: add payload-aware intrans functionsJustus Winter2014-12-073-0/+22
| | | | | | | | * proc/mig-decls.h (begin_using_proc_payload): New function. (begin_using_exc_payload): Likewise. * proc/mig-mutate.h: Add mutators. * proc/proc_exc.defs (exception_t): Add payload-aware in-translator function.
* pflocal: add payload-aware intrans functionsJustus Winter2014-12-072-0/+15
| | | | | | * pflocal/mig-mutate.h: Add mutators. * pflocal/mig-decls.c (begin_using_sock_user_payload): New function. (begin_using_addr_payload): Likewise.
* pfinet: make the demuxers payload-awareJustus Winter2014-12-072-3/+29
| | | | | * pfinet/ethernet.c (ethernet_demuxer): Make the demuxer payload-aware. * pfinet/main.c (pfinet_demuxer): Likewise.
* pfinet: add payload-aware intrans functionsJustus Winter2014-12-072-0/+16
| | | | | | * pfinet/mig-mutate.h: Add mutators. * pfinet/mig-decls.h (begin_using_socket_payload): New function. (begin_using_sockaddr_payload): Likewise.
* exec: add payload-aware intrans functionsJustus Winter2014-12-072-0/+9
| | | | | * exec/execmutations.h: Add mutators. * exec/mig-decls.h (begin_using_bootinfo_payload): New function.
* console-client: make the demuxer payload-awareJustus Winter2014-12-071-2/+10
| | | | * console-client/trans.c (console_demuxer): make the demuxer payload-aware.
* console: add a payload-aware intrans functionJustus Winter2014-12-072-0/+9
| | | | | * console/priv.h (begin_using_protid_payload): New function. * console/mutations.h: Add mutators.
* auth: add a payload-aware intrans functionJustus Winter2014-12-072-0/+7
| | | | | * auth/mig-mutate.h: Add mutator. * auth/mig-decls.h (auth_payload_to_handle): New function.
* libcons: add a payload-aware intrans functionJustus Winter2014-12-072-0/+7
| | | | | * libcons/mutations.h: Add mutator. * libcons/priv.h (begin_using_notify_payload): New function.
* libpager: add a payload-aware intrans functionJustus Winter2014-12-072-0/+9
| | | | | * libpager/mig-decls.h (begin_using_pager_payload): New function. * libpager/mig-mutate.h: Add mutators.
* libtrivfs: add payload-aware intrans functionsJustus Winter2014-12-072-0/+61
| | | | | | * libtrivfs/mig-decls.h (trivfs_begin_using_protid_payload): New function. (trivfs_begin_using_control_payload): Likewise. * libtrivfs/mig-mutate.h: Add mutators.
* libnetfs: add a payload-aware intrans functionJustus Winter2014-12-072-0/+9
| | | | | * libnetfs/priv.h (begin_using_protid_payload): New function. * libnetfs/mutations.h: Add mutator.
* libdiskfs: add payload-aware intrans functionsJustus Winter2014-12-072-0/+34
| | | | | | | * libdiskfs/diskfs.h (diskfs_begin_using_protid_payload): New function. (diskfs_begin_using_control_payload): Likewise. (diskfs_begin_using_bootinfo_payload): Likewise. * libdiskfs/fsmutations.h: Add mutators.
* libports: add a payload-aware intrans functionJustus Winter2014-12-072-0/+10
| | | | | * libports/mig-decls.h (begin_using_port_info_payload): New function. * libports/mig-mutate.h: Add mutator.
* libports: add `ports_lookup_payload' and `ports_payload_get_name'Justus Winter2014-12-073-1/+76
| | | | | | | | | | | | These two functions map payloads to objects and port names. The former can be used like `ports_lookup_port' to look up objects, the latter to map payloads to port names if the server function expects a `mach_port_t'. * libports/ports.h: Add function ports_payload_get_name. * libports/lookup-payload.c: New file. * libports/ports.h (ports_lookup_payload): Add declaration. * libports/Makefile (SRCS): Add lookup-payload.c.
* Fix coding styleSamuel Thibault2014-12-061-1/+1
|
* libshouldbeinlibc: move the reference counting primitives hereJustus Winter2014-12-013-19/+52
| | | | | | | | | | Declare all functions `extern inline' instead of `static inline'. This allows us to use them in functions declared as `extern inline'. * libshouldbeinlibc/refcount.h: Move here, and declare all functions `extern inline'. * libshouldbeinlibc/refcount.c: And define the functions here. * libshouldbeinlibc/Makefile: Add `refcount.{c,h}'.
* Revert "random: fix a receiver lookup"Justus Winter2014-11-284-74/+4
| | | | | | | This reverts "8927fbd63e29005ddb9b2c2264046089bf669857". The change mistakenly adds mutators for the `startup' protocol, but the server routine is for the `startup_notify' protocol.
* Add atomicity support to fshelp_acquire_lockSamuel Thibault2014-11-271-18/+77
| | | | | | | | | | This adds support for the __LOCK_ATOMIC flag which requests atomicity of SH->EX upgrades and EX->SH downgrades. * libfshelp/lock-acquire.c (__LOCK_ATOMIC): New macro (fshelp_acquire_lock): When __LOCK_ATOMIC is set, do not release the lock early, change the lock hold atomically instead. On upgrade to LOCK_EX, prevent new shared locks from being acquired to avoid starvation.
* Fix proc crashesSamuel Thibault2014-11-271-2/+4
| | | | | * proc/notify.c (do_mach_notify_dead_name): When `pi' is NULL, immediately return EOPNOTSUPP.
* libdiskfs: fix fabrication of protidJustus Winter2014-11-231-1/+2
| | | | * libdiskfs/dir-init.c (diskfs_init_dir): Fix fabrication of protid.
* libpager: make the request queue more memory-efficientJustus Winter2014-11-231-17/+49
| | | | | | | | | | | | | | | | | | Previously, `pager_demuxer' allocated a chunk of memory for the response message. But if memory gets scarce, the kernel will issue a large number of paging requests to free up memory. In such a situation, allocating memory is dangerous. Fix this by not allocating space for the response message, rather, use a chunk of the workers stack space. Also, we only handle the `notify' and `memory_object' protocol, which both only contain simple routines, we only need a `mig_response_header_t'. * libpager/demuxer.c (struct request): Remove `inp' and `outp'. (request_inp): New function. (pager_demuxer): Do not allocate memory for the response. (mig_reply_setup): New function. (worker_func): Adjust accordingly.
* boot: improve the demuxerJustus Winter2014-11-211-18/+49
| | | | | | | | | | Handle multiple request types as recommended by the Mach Server Writer's Guide section 4, subsection "Handling Multiple Request Types". This avoids initializing the reply message in every X_server function. * boot/boot.c (mig_reply_setup): Provide local version. (request_server): Rename to `boot_demuxer', and improve the dispatch.
* boot: implement pseudo-time deviceJustus Winter2014-11-211-3/+35
| | | | | | | * boot/boot.c (pseudo_time): New variable. (main): Allocate port `pseudo_time'. (ds_device_open): Give out `pseudo_time'. (ds_device_map): Emulate Mach-style `Mapped Time'.
* boot: support ds_device_get_status with flavor DEV_GET_RECORDSJustus Winter2014-11-211-12/+21
| | | | * boot/boot.c (ds_device_get_status): Support flavor DEV_GET_RECORDS.
* boot: drop obsolete device proceduresJustus Winter2014-11-211-34/+0
| | | | | | * boot/boot.c (ds_xxx_device_set_status): Remove function. (ds_xxx_device_get_status): Likewise. (ds_xxx_device_set_filter): Likewise.
* boot: remove unused function `boot_script_read_file'Justus Winter2014-11-212-49/+1
| | | | | | | | | | The unused function `boot_script_read_file' requires access to the default pager, which is privileged. * boot/boot.c (defpager): Remove now unused variable. (boot_script_read_file): Remove unused function. (main): Do not acquire port to the default pager. * boot/boot_script.h (boot_script_read_file): Remove declaration.
* boot: drop bootstrap compat codeJustus Winter2014-11-211-78/+0
| | | | | | | | GNU Mach never sent old-style bootstrap messages. Drop the unused compatibility code. * boot/boot.c (request_server): Drop unused code. (bootstrap_compat): Drop unused function.
* startup: also open `console' for readingJustus Winter2014-11-211-1/+1
| | | | * startup/startup.c (main): Also open `console' for reading.
* proc: gracefully handle failure to increase priorityJustus Winter2014-11-211-12/+32
| | | | | | * proc/main.c (increase_priority): New function. (main): Move code increasing the proc servers priority to a new function and handle errors gracefully.
* Makeconf: handle the gnumach protocolJustus Winter2014-11-211-1/+3
| | | | * Makeconf (mach_defs_names): Add `gnumach'.
* startup: bind the startup server to /servers/startupJustus Winter2014-11-217-21/+146
| | | | | | | | | | | | | | | | | | | | | | | | | Previously, the Hurd (ab)used the fact that the startup server speaks all protocols on its message port. Any server that wished to register for shutdown notifications would use proc_getmsgport to get a port to the startup server. This hardcodes the PID of /hurd/startup, and does not allow one to point a server to ones own startup server (e.g. using remap). Bind the startup server to /servers/startup instead. Use this to contact the startup server. * exec/main.c (S_exec_init): Use /servers/startup. Fall back to the old method so that the system still boots when the node /servers/startup is missing. * hurd/paths.h (_SERVERS_STARTUP): New macro. * libdiskfs/boot-start.c (diskfs_S_fsys_init): Use /servers/startup. * libdiskfs/init-startup.c (_diskfs_init_completed): Likewise. * pfinet/main.c (arrange_shutdown_notification): Likewise. * startup/Makefile (OBJS): Add fsysServer.o. * startup/startup.c (demuxer): Handle the fsys protocol. (main): Bind to /servers/startup. (S_fsys_getroot): Implement fsys_getroot. Stub out the rest.
* startup: fix the declaration of the *_server functionsJustus Winter2014-11-211-1/+3
| | | | * startup/startup.c (demuxer): Fix the declaration of the server functions.
* startup: be more specific in the shutdown messageJustus Winter2014-11-211-1/+1
| | | | | | | Use the BOOT macro to print either halt or reboot instead of the generic shutdown in the event of an system shutdown. * startup/startup.c (reboot_system): Use more specific message.
* startup: do not pass signals on to the childJustus Winter2014-11-213-189/+1
| | | | | | | | | | | | | | Formerly /hurd/startup would forward all signals to the child it started (e.g. /libexec/runsystem). The motivation for doing so is not revealed in the comments, nor it is mentioned in the history of the version control system. This patch removes the forwarding of signals to the child. * startup/startup.c (process_signal): Do not pass signals on to the child. * startup/stubs.c: Remove file. * startup/Makefile: Remove stubs.c.
* init: add a minimalist init programJustus Winter2014-11-217-58/+364
| | | | | | | | | | | | | | | | | | | | | | This patch adds a minimalist init program. It is somewhat lacking in features, but is able to bring up a Hurd system with the runsystem and rc scripts. In fact, it roughly does what the former /hurd/init did, modulo all the very early bootstrapping stuff and the startup protocol. It is started when all the essential servers are up and running, so it can make use of most of the POSIX goodies, making its implementation much simpler. * Makefile (prog-subdirs): Add init. * daemons/runsystem.sh: Generalize runsystem so that it can start any init as specified on the kernel command line. By default, it starts /hurd/init. * daemons/runsystem.hurd: This is a verbatim copy of runsystem.sh. It is started by /hurd/init. * daemons/rc.sh: Do not start /hurd/mach-defpager as it is already started in runsystem.sh. * daemons/Makefile (SRCS): Add runsystem.hurd. * init/Makefile: New file. * init/init.c: Likewise.
* startup: rename /hurd/init to /hurd/startupJustus Winter2014-11-218-11/+12
| | | | | | | | | | | | | This patch series splits /hurd/init into two programs. As a first step, this patch renames /hurd/init to /hurd/startup. It is called startup because it speaks the startup protocol. * startup: Rename init to startup. Adjust accordingly. * Makefile (prog-subdirs): Likewise. * doc/hurd.texi (Server Bootstrap): Likewise. * hurd/paths.h (_HURD_STARTUP): Likewise. * libdiskfs/boot-start.c (diskfs_boot_init_program): Likewise. * libdiskfs/opts-std-startup.c (startup_options): Likewise.
* procfs: do not hard-code the default argument valuesJustus Winter2014-11-211-3/+3
| | | | | * procfs/main.c (common_options): If possible, do not hard-code the default values.
* Add proc_set_init_task, make runsystem pid 1Justus Winter2014-11-2110-35/+93
| | | | | | | | | | | | | | | | | * hurd/process.defs (proc_set_init_task): New procedure. * hurd/process_reply.defs (proc_set_init_task): Likewise. * hurd/process_request.defs (proc_set_init_task): Likewise. * include/pids.h: Add HURD_PID_INIT as 1, adjust others accordingly. * init/init.c (start_child): Register the child task. * proc/proc.h (init_proc): New variable. (create_startup_proc): Rename to create_init_proc. * proc/main.c (main): Create placeholder proc object for pid 1. * proc/mgt.c: Use init_proc instead of startup_proc, as the former is the new root of the process tree. (create_startup_proc): Rename to create_init_proc. (S_proc_set_init_task): New function. * doc/hurd.texi (Server Bootstrap): Update accordingly. * procfs/main.c: Do not hard-code kernel pid, use pids.h instead.
* trans/mtab: avoid firmlink loopsJustus Winter2014-11-211-1/+45
| | | | | | | | | | | * trans/mtab.c (struct mtab): Add a hash table to keep track of seen ports. (mtab_mark_as_seen): New function that records the identity port of a given node in the hash table and reports whether it has been there before. (mtab_populate): Use the new function to avoid running in circles. (main, open_hook): Initialize hash table. (close_hook): Free ports and destroy hash table.
* Always canonicalize fstab entries with realpathSamuel Thibault2014-11-212-44/+63
| | | | | | | | | | | | To avoid spurious ./, /, symlinks, etc. * sutils/fstab.c (fs_set_mntent): Try to call realpath on mnt_fsname and mnt_dir field of `mntent'. (fstab_find_mount): Try to call realpath on `name' parameter. (fstab_find): Do not try to call realpath. (fstab_read): Reset errno to zero before calling getmntent. * utils/umount.c (main): Do not warn about missing fstab entries for active translators.
* Fix compiler warningSamuel Thibault2014-11-211-1/+1
| | | | | | * libnetfs/dir-lookup.c (netfs_S_dir_lookup): Initialize register_translator to 0, otherwise it may be used uninitialized in case of non-ENOENT errors.
* Fix recording complete path of passive relative translatorsSamuel Thibault2014-11-211-1/+10
| | | | | * libnetfs/dir-lookup.c (netfs_S_dir_lookup): Prepend current path to the relative path before recording the active translator.
* Fix recording complete path of passive relative translatorsSamuel Thibault2014-11-211-1/+10
| | | | | * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Prepend current path to the relative path before recording the active translator.
* Let pty readers always read end of writer outputSamuel Thibault2014-11-211-1/+1
| | | | | * term/ptyio.c (pty_io_read): Do not return EIO when there is no writer any more but some output remains in the pipe.