diff --git a/headers/private/kernel/kmodule.h b/headers/private/kernel/kmodule.h index b3dc0d37cd..14736fdb53 100644 --- a/headers/private/kernel/kmodule.h +++ b/headers/private/kernel/kmodule.h @@ -30,6 +30,7 @@ extern status_t unload_module(const char *path); extern status_t load_module(const char *path, module_info ***_modules); extern status_t module_init(struct kernel_args *args); +extern status_t module_init_post_threads(void); #ifdef __cplusplus } diff --git a/src/system/kernel/main.cpp b/src/system/kernel/main.cpp index 194cafae2b..153bb6d41d 100644 --- a/src/system/kernel/main.cpp +++ b/src/system/kernel/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Copyright 2002-2008, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. * * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. @@ -129,6 +129,12 @@ _start(kernel_args *bootKernelArgs, int currentCPU) boot_item_init(); driver_settings_init(&sKernelArgs); debug_init_post_vm(&sKernelArgs); + TRACE("init teams\n"); + team_init(&sKernelArgs); + TRACE("init ELF loader\n"); + elf_init(&sKernelArgs); + TRACE("init modules\n"); + module_init(&sKernelArgs); int_init_post_vm(&sKernelArgs); cpu_init_post_vm(&sKernelArgs); commpage_init(); @@ -154,8 +160,6 @@ _start(kernel_args *bootKernelArgs, int currentCPU) smp_init_post_generic_syscalls(); TRACE("init cbuf\n"); cbuf_init(); - TRACE("init teams\n"); - team_init(&sKernelArgs); TRACE("init threads\n"); thread_init(&sKernelArgs); TRACE("init ports\n"); @@ -163,15 +167,13 @@ _start(kernel_args *bootKernelArgs, int currentCPU) TRACE("init kernel daemons\n"); kernel_daemon_init(); arch_platform_init_post_thread(&sKernelArgs); - TRACE("init posix semaphores\n"); + TRACE("init POSIX semaphores\n"); realtime_sem_init(); xsi_ipc_init(); TRACE("init VM threads\n"); vm_init_post_thread(&sKernelArgs); low_resource_manager_init_post_thread(); - TRACE("init ELF loader\n"); - elf_init(&sKernelArgs); TRACE("init scheduler\n"); scheduler_init(); TRACE("init notification services\n"); @@ -245,7 +247,7 @@ main2(void *unused) TRACE("Init modules\n"); boot_splash_set_stage(BOOT_SPLASH_STAGE_1_INIT_MODULES); - module_init(&sKernelArgs); + module_init_post_threads(); // init userland debugging TRACE("Init Userland debugging\n"); diff --git a/src/system/kernel/module.cpp b/src/system/kernel/module.cpp index 6f14a4e9c9..736a930b33 100644 --- a/src/system/kernel/module.cpp +++ b/src/system/kernel/module.cpp @@ -1815,10 +1815,6 @@ module_init(kernel_args* args) new(&sModuleNotificationService) ModuleNotificationService(); - register_kernel_daemon(&ModuleNotificationService::HandleNotifications, - NULL, 10); - // once every second - sDisableUserAddOns = get_safemode_boolean(B_SAFEMODE_DISABLE_USER_ADD_ONS, false); @@ -1829,6 +1825,17 @@ module_init(kernel_args* args) } +status_t +module_init_post_threads(void) +{ + return register_kernel_daemon( + &ModuleNotificationService::HandleNotifications, NULL, 10); + // once every second + + return B_OK; +} + + // #pragma mark - Exported Kernel API (public part)