[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Fix /proc/?/exe values for bootstrap processes
From: |
Damien Zammit |
Subject: |
[PATCH] Fix /proc/?/exe values for bootstrap processes |
Date: |
Sat, 10 Jul 2021 20:30:07 +1000 |
TODO: fix rumpdisk's /proc/6/stat
---
libmachdev/trivfs_server.c | 15 +--------------
startup/startup.c | 24 ++++++++++++++++++++++--
2 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/libmachdev/trivfs_server.c b/libmachdev/trivfs_server.c
index bbd73555..9c604595 100644
--- a/libmachdev/trivfs_server.c
+++ b/libmachdev/trivfs_server.c
@@ -289,13 +289,12 @@ trivfs_S_fsys_init (struct trivfs_control *fsys,
retry_type retry;
string_t retry_name;
mach_port_t right = MACH_PORT_NULL;
- process_t proc, parent_proc;
+ process_t parent_proc;
/* Traverse to the bootstrapping server first */
task_get_bootstrap_port (mach_task_self (), &bootstrap);
if (bootstrap)
{
-
err = proc_task2proc (procserver, parent_task, &parent_proc);
assert_perror_backtrace (err);
err = fsys_init (bootstrap, parent_proc, MACH_MSG_TYPE_COPY_SEND,
authhandle);
@@ -322,18 +321,6 @@ trivfs_S_fsys_init (struct trivfs_control *fsys,
_hurd_libc_proc_init(machdev_argv);
#endif
- /* Mark us as important. */
- proc = getproc ();
- assert_backtrace (proc);
- err = proc_mark_important (proc);
- if (err && err != EPERM)
- assert_perror_backtrace (err);
- err = proc_mark_exec (proc);
- assert_perror_backtrace (err);
- err = proc_set_exe (proc, program_invocation_short_name);
- assert_perror_backtrace (err);
- mach_port_deallocate (mach_task_self (), proc);
-
if (bootstrapping)
{
if (devnode)
diff --git a/startup/startup.c b/startup/startup.c
index 9faeb462..f0dd415d 100644
--- a/startup/startup.c
+++ b/startup/startup.c
@@ -1462,7 +1462,7 @@ S_startup_essential_task (mach_port_t server,
char *name,
mach_port_t credential)
{
- static int authinit, procinit, execinit;
+ static int authinit, procinit, execinit, fsinit;
int fail;
/* Always deallocate the extra reference this message carries. */
@@ -1492,13 +1492,31 @@ S_startup_essential_task (mach_port_t server,
proc_mark_important (execproc);
proc_set_exe (execproc, "/hurd/exec");
}
+ else if (!strcmp (name, "pci-arbiter"))
+ {
+ mach_port_t pciproc;
+ proc_child (procserver, task);
+ proc_task2proc (procserver, task, &pciproc);
+ proc_mark_important (pciproc);
+ proc_set_exe (pciproc, name);
+ }
+ else if (!strcmp (name, "rumpdisk"))
+ {
+ mach_port_t rumpdiskproc;
+ proc_child (procserver, task);
+ proc_task2proc (procserver, task, &rumpdiskproc);
+ proc_mark_important (rumpdiskproc);
+ proc_set_exe (rumpdiskproc, name);
+ }
+ else if (!strcmp (name, "ext2fs"))
+ fsinit = 1;
else if (!strcmp (name, "proc"))
procinit = 1;
if (verbose)
fprintf (stderr, " still waiting for:");
- if (authinit && execinit && procinit)
+ if (authinit && execinit && procinit && fsinit)
{
if (verbose)
fprintf (stderr, " none!\n");
@@ -1524,6 +1542,8 @@ S_startup_essential_task (mach_port_t server,
fprintf (stderr, " exec");
if (! procinit)
fprintf (stderr, " proc");
+ if (! fsinit)
+ fprintf (stderr, " fs");
fprintf (stderr, "\n");
}
}
--
2.31.0
- [PATCH] Fix /proc/?/exe values for bootstrap processes,
Damien Zammit <=