diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-02-09 02:27:53 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-02-09 02:27:53 +0100 |
commit | 4bbdda186cbd5f2bd377c1a03b1b09efdab6dd23 (patch) | |
tree | 72e10add6ae1f573733c7b79a9b7ec4684458f82 | |
parent | 41bf21a9d8e5b6b9172fabab7c8186c51d0c4524 (diff) |
swapon: Auto-start mach-defpager
Which allows not to start it unless swap is configured, so Mach can know
when it is not and avoid trying to use a default memory manager.
-rw-r--r-- | daemons/runsystem.sh | 4 | ||||
-rw-r--r-- | sutils/swapon.c | 26 |
2 files changed, 22 insertions, 8 deletions
diff --git a/daemons/runsystem.sh b/daemons/runsystem.sh index c3d37000..c2bc48d2 100644 --- a/daemons/runsystem.sh +++ b/daemons/runsystem.sh @@ -114,10 +114,6 @@ case "$flags" in ;; esac -# Start the default pager. It will bail if there is already one running. -echo Starting default pager -/hurd/mach-defpager - # This is necessary to make stat / return the correct device ids. fsysopts / --update --readonly diff --git a/sutils/swapon.c b/sutils/swapon.c index 2bda8be5..b699b933 100644 --- a/sutils/swapon.c +++ b/sutils/swapon.c @@ -88,7 +88,7 @@ static char *doc = static mach_port_t def_pager = MACH_PORT_NULL; static mach_port_t dev_master = MACH_PORT_NULL; -static void get_def_pager(void) +static void get_def_pager(int autostart) { int err; mach_port_t host; @@ -114,7 +114,25 @@ static void get_def_pager(void) if (err) error (13, err, "Cannot get default pager port"); if (def_pager == MACH_PORT_NULL) - error (14, 0, "No default pager (memory manager) is running!"); + { + error (autostart ? 0 : 14, 0, + "No default pager (memory manager) is running"); + if (autostart) + { + /* Try to auto-start it. */ + err = system ("/hurd/mach-defpager"); + if (err) + error (15, err, "Could not start it"); + else + { + fprintf (stderr, "Started it\n"); + err = vm_set_default_memory_manager (host, &def_pager); + mach_port_deallocate (mach_task_self (), host); + if (err) + error (16, err, "Cannot get default pager port"); + } + } + } } } @@ -400,7 +418,7 @@ swaponoff (const char *file, int add, int skipnotexisting) return EINVAL; } - get_def_pager(); + get_def_pager (add); recnum_t runs[store->num_runs * 2]; size_t i, j; @@ -534,7 +552,7 @@ main (int argc, char *argv[]) size_t i; int err; - get_def_pager(); + get_def_pager (0); err = default_pager_storage_info (def_pager, &size, &nsize, &free, &nfree, &names, &names_len); |