* Shuffled initializers around: the team, ELF, and module initializers come

now a lot earlier.
* That makes it now possible to use modules pretty early in the kernel (like
  before timer_init(), or int_init_post_vm()).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26790 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2008-08-04 13:26:13 +00:00
parent cc0b310748
commit 423fcd43ae
3 changed files with 21 additions and 11 deletions
+1
View File
@@ -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 load_module(const char *path, module_info ***_modules);
extern status_t module_init(struct kernel_args *args); extern status_t module_init(struct kernel_args *args);
extern status_t module_init_post_threads(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
+9 -7
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2008, Axel Dörfler, [email protected]. All rights reserved. * Copyright 2002-2008, Axel Dörfler, [email protected].
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
@@ -129,6 +129,12 @@ _start(kernel_args *bootKernelArgs, int currentCPU)
boot_item_init(); boot_item_init();
driver_settings_init(&sKernelArgs); driver_settings_init(&sKernelArgs);
debug_init_post_vm(&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); int_init_post_vm(&sKernelArgs);
cpu_init_post_vm(&sKernelArgs); cpu_init_post_vm(&sKernelArgs);
commpage_init(); commpage_init();
@@ -154,8 +160,6 @@ _start(kernel_args *bootKernelArgs, int currentCPU)
smp_init_post_generic_syscalls(); smp_init_post_generic_syscalls();
TRACE("init cbuf\n"); TRACE("init cbuf\n");
cbuf_init(); cbuf_init();
TRACE("init teams\n");
team_init(&sKernelArgs);
TRACE("init threads\n"); TRACE("init threads\n");
thread_init(&sKernelArgs); thread_init(&sKernelArgs);
TRACE("init ports\n"); TRACE("init ports\n");
@@ -163,15 +167,13 @@ _start(kernel_args *bootKernelArgs, int currentCPU)
TRACE("init kernel daemons\n"); TRACE("init kernel daemons\n");
kernel_daemon_init(); kernel_daemon_init();
arch_platform_init_post_thread(&sKernelArgs); arch_platform_init_post_thread(&sKernelArgs);
TRACE("init posix semaphores\n"); TRACE("init POSIX semaphores\n");
realtime_sem_init(); realtime_sem_init();
xsi_ipc_init(); xsi_ipc_init();
TRACE("init VM threads\n"); TRACE("init VM threads\n");
vm_init_post_thread(&sKernelArgs); vm_init_post_thread(&sKernelArgs);
low_resource_manager_init_post_thread(); low_resource_manager_init_post_thread();
TRACE("init ELF loader\n");
elf_init(&sKernelArgs);
TRACE("init scheduler\n"); TRACE("init scheduler\n");
scheduler_init(); scheduler_init();
TRACE("init notification services\n"); TRACE("init notification services\n");
@@ -245,7 +247,7 @@ main2(void *unused)
TRACE("Init modules\n"); TRACE("Init modules\n");
boot_splash_set_stage(BOOT_SPLASH_STAGE_1_INIT_MODULES); boot_splash_set_stage(BOOT_SPLASH_STAGE_1_INIT_MODULES);
module_init(&sKernelArgs); module_init_post_threads();
// init userland debugging // init userland debugging
TRACE("Init Userland debugging\n"); TRACE("Init Userland debugging\n");
+11 -4
View File
@@ -1815,10 +1815,6 @@ module_init(kernel_args* args)
new(&sModuleNotificationService) ModuleNotificationService(); new(&sModuleNotificationService) ModuleNotificationService();
register_kernel_daemon(&ModuleNotificationService::HandleNotifications,
NULL, 10);
// once every second
sDisableUserAddOns = get_safemode_boolean(B_SAFEMODE_DISABLE_USER_ADD_ONS, sDisableUserAddOns = get_safemode_boolean(B_SAFEMODE_DISABLE_USER_ADD_ONS,
false); 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) // #pragma mark - Exported Kernel API (public part)