diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2022-12-03 20:18:36 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2022-12-03 20:18:36 +0100 |
commit | 45afcc68979b700bdef1dc0e27ba79e0822b1c18 (patch) | |
tree | eb095c4f47b97996618589d9b9c4859c1a124155 /kern | |
parent | 9518a5e29e6774fb66821140c916522abb985eaf (diff) | |
download | gnumach-45afcc68979b700bdef1dc0e27ba79e0822b1c18.tar.gz gnumach-45afcc68979b700bdef1dc0e27ba79e0822b1c18.tar.bz2 gnumach-45afcc68979b700bdef1dc0e27ba79e0822b1c18.zip |
task: Add task_set_essential
Whenever a Hurd essential task crashes, startup just reboots the system
since there's not much that can be done at that point. When we have a
kernel debugger, however, we could at least get crashing information, so
let's let Hurd's startup tell the kernel which tasks are essential, and
trigger the debugger whenever they crash.
Diffstat (limited to 'kern')
-rw-r--r-- | kern/task.c | 16 | ||||
-rw-r--r-- | kern/task.h | 3 |
2 files changed, 18 insertions, 1 deletions
diff --git a/kern/task.c b/kern/task.c index e91c192b..e9158c73 100644 --- a/kern/task.c +++ b/kern/task.c @@ -178,6 +178,7 @@ task_create_kernel( new_task->may_assign = TRUE; new_task->assign_active = FALSE; + new_task->essential = FALSE; #if MACH_PCSAMPLE new_task->pc_sample.buffer = 0; @@ -1157,6 +1158,21 @@ task_set_name( } /* + * task_set_essential + * + * Set whether TASK is an essential task, i.e. the whole system will crash + * if this task crashes. + */ +kern_return_t +task_set_essential( + task_t task, + boolean_t essential) +{ + task->essential = !!essential; + return KERN_SUCCESS; +} + +/* * task_collect_scan: * * Attempt to free resources owned by tasks. diff --git a/kern/task.h b/kern/task.h index 52eb8324..6251317c 100644 --- a/kern/task.h +++ b/kern/task.h @@ -64,7 +64,8 @@ struct task { /* Flags */ unsigned int active:1, /* Task has not been terminated */ /* boolean_t */ may_assign:1, /* can assigned pset be changed? */ - assign_active:1; /* waiting for may_assign */ + assign_active:1, /* waiting for may_assign */ + essential:1; /* Is this task essential for the system? */ /* Miscellaneous */ vm_map_t map; /* Address space description */ |