From fc1fd907b4fa21331a2f6b364b5fff351bf513a3 Mon Sep 17 00:00:00 2001 From: Samuel Bowman Date: Fri, 26 Aug 2022 22:01:25 -0400 Subject: [PATCH] Kernel: Create all kernel processes before enabling boot profiling Process created performance events for kernel processes are only ever emitted for the kernel processes that exist when profiling is enabled. Any new kernel processes created after profiling is enabled will not have corresponding process created performance events, so all kernel processes should be created before enabling profiling. NetworkTask was the only kernel process being created after enabling profiling, so we now just create it before enabling profiling. This fixes an issue where Profiler was failing to parse boot profiles as a result of NetworkTask not having a process created event. --- Kernel/Arch/init.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Kernel/Arch/init.cpp b/Kernel/Arch/init.cpp index f11a61a4ddc..6b2d785af16 100644 --- a/Kernel/Arch/init.cpp +++ b/Kernel/Arch/init.cpp @@ -420,6 +420,10 @@ void init_stage2(void*) g_init_pid = init_process->pid(); init_thread->set_priority(THREAD_PRIORITY_HIGH); + NetworkTask::spawn(); + + // NOTE: All kernel processes must be created before enabling boot profiling. + // This is so profiling_enable() can emit process created performance events for them. if (boot_profiling) { dbgln("Starting full system boot profiling"); MutexLocker mutex_locker(Process::current().big_lock()); @@ -428,8 +432,6 @@ void init_stage2(void*) VERIFY(!result.is_error()); } - NetworkTask::spawn(); - Process::current().sys$exit(0); VERIFY_NOT_REACHED(); }