summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2025-02-08 21:07:49 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2025-02-08 21:07:49 +0100
commit9a7ba7fd88fbc87c6e25e82d8c3bb838bf1ebf8d (patch)
treeb223480247a535bca708672305698c1479c09246
parentb75c7dda611432e8598bcd0ab9652380a4f819c7 (diff)
Add names to kernel tasks and threads
-rw-r--r--device/device_init.c4
-rw-r--r--kern/bootstrap.c2
-rw-r--r--kern/profile.c4
-rw-r--r--kern/startup.c15
-rw-r--r--kern/thread.c1
-rw-r--r--kern/thread.h8
6 files changed, 25 insertions, 9 deletions
diff --git a/device/device_init.c b/device/device_init.c
index 287d0a20..8a2c295f 100644
--- a/device/device_init.c
+++ b/device/device_init.c
@@ -62,6 +62,6 @@ device_service_create(void)
device_pager_init();
chario_init();
- (void) kernel_thread(kernel_task, io_done_thread, 0);
- (void) kernel_thread(kernel_task, net_thread, 0);
+ (void) kernel_thread(kernel_task, "io_done", io_done_thread, 0);
+ (void) kernel_thread(kernel_task, "net", net_thread, 0);
}
diff --git a/kern/bootstrap.c b/kern/bootstrap.c
index 0470e1b6..2ad11635 100644
--- a/kern/bootstrap.c
+++ b/kern/bootstrap.c
@@ -335,7 +335,9 @@ bootstrap_exec_compat(void *e)
*/
(void) task_create(TASK_NULL, FALSE, &bootstrap_task);
+ (void) task_set_name(bootstrap_task, "bootstrap");
(void) thread_create(bootstrap_task, &bootstrap_thread);
+ (void) thread_set_name(bootstrap_thread, "bootstrap");
/*
* Insert send rights to the master host and device ports.
diff --git a/kern/profile.c b/kern/profile.c
index 4fcd541f..35b273a0 100644
--- a/kern/profile.c
+++ b/kern/profile.c
@@ -326,7 +326,7 @@ printf("ERROR:mach_sample_thread:cannot set pbuf_nb\n");
cur_thread->thread_profiled = TRUE;
cur_thread->thread_profiled_own = TRUE;
if (profile_thread_id == THREAD_NULL)
- profile_thread_id = kernel_thread(current_task(), profile_thread);
+ profile_thread_id = kernel_thread(current_task(), "profile", profile_thread);
} else {
if (!cur_thread->thread_profiled_own)
cur_thread->thread_profiled = FALSE;
@@ -379,7 +379,7 @@ mach_sample_task (ipc_space_t task, ipc_object_t reply, task_t cur_task)
if (turnon && profile_thread_id == THREAD_NULL)
profile_thread_id =
- kernel_thread(current_task(), profile_thread);
+ kernel_thread(current_task(), "profile", profile_thread);
cur_task->task_profiled = turnon;
actual = cur_task->thread_count;
sentone = 0;
diff --git a/kern/startup.c b/kern/startup.c
index 61751d35..db558a3e 100644
--- a/kern/startup.c
+++ b/kern/startup.c
@@ -50,6 +50,7 @@
#include <kern/xpr.h>
#include <kern/bootstrap.h>
#include <kern/startup.h>
+#include <kern/printf.h>
#include <vm/vm_kern.h>
#include <vm/vm_map.h>
#include <vm/vm_object.h>
@@ -175,6 +176,7 @@ void setup_main(void)
* Create the thread, and point it at the routine.
*/
(void) thread_create(kernel_task, &startup_thread);
+ thread_set_name(startup_thread, "startup");
thread_start(startup_thread, start_kernel_threads);
/*
@@ -215,8 +217,11 @@ void start_kernel_threads(void)
for (i = 0; i < NCPUS; i++) {
if (machine_slot[i].is_cpu) {
thread_t th;
+ char name[10];
(void) thread_create(kernel_task, &th);
+ snprintf(name, sizeof(name), "idle/%d", i);
+ thread_set_name(th, name);
thread_bind(th, cpu_to_processor(i));
thread_start(th, idle_thread);
thread_doswapin(th);
@@ -224,18 +229,18 @@ void start_kernel_threads(void)
}
}
- (void) kernel_thread(kernel_task, reaper_thread, (char *) 0);
- (void) kernel_thread(kernel_task, swapin_thread, (char *) 0);
- (void) kernel_thread(kernel_task, sched_thread, (char *) 0);
+ (void) kernel_thread(kernel_task, "reaper", reaper_thread, (char *) 0);
+ (void) kernel_thread(kernel_task, "swapin", swapin_thread, (char *) 0);
+ (void) kernel_thread(kernel_task, "sched", sched_thread, (char *) 0);
#ifndef MACH_XEN
- (void) kernel_thread(kernel_task, intr_thread, (char *)0);
+ (void) kernel_thread(kernel_task, "intr", intr_thread, (char *)0);
#endif /* MACH_XEN */
#if NCPUS > 1
/*
* Create the shutdown thread.
*/
- (void) kernel_thread(kernel_task, action_thread, (char *) 0);
+ (void) kernel_thread(kernel_task, "action", action_thread, (char *) 0);
/*
* Allow other CPUs to run.
diff --git a/kern/thread.c b/kern/thread.c
index a656c076..69d24eaa 100644
--- a/kern/thread.c
+++ b/kern/thread.c
@@ -1712,6 +1712,7 @@ thread_start(
thread_t kernel_thread(
task_t task,
+ const char * name,
continuation_t start,
void * arg)
{
diff --git a/kern/thread.h b/kern/thread.h
index 81d32924..4c7ef507 100644
--- a/kern/thread.h
+++ b/kern/thread.h
@@ -304,6 +304,7 @@ extern void thread_start(
continuation_t start);
extern thread_t kernel_thread(
task_t task,
+ const char * name,
continuation_t start,
void *arg);
extern kern_return_t thread_priority(
@@ -353,6 +354,12 @@ extern kern_return_t thread_assign(
extern kern_return_t thread_assign_default(
thread_t thread);
extern void stack_collect(void);
+extern kern_return_t thread_set_name(
+ thread_t thread,
+ const_kernel_debug_name_t name);
+extern kern_return_t thread_get_name(
+ thread_t thread,
+ kernel_debug_name_t name);
#endif
/*
@@ -374,6 +381,7 @@ extern void thread_halt_self(continuation_t);
extern void thread_force_terminate(thread_t);
extern thread_t kernel_thread(
task_t task,
+ const char * name,
void (*start)(void),
void * arg);