Split the commpage initialization into two parts. The second part is executed

after all CPUs have been queried for their features. On SMP machines
sysenter/sysexit weren't used before due to the non-boot CPUs appearing not
to have the feature.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31226 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2009-06-24 13:53:58 +00:00
parent ed832ef623
commit fab1c05c05
6 changed files with 31 additions and 7 deletions
+3 -1
View File
@@ -16,12 +16,14 @@ extern "C" {
#endif
status_t commpage_init(void);
status_t commpage_init_post_cpus(void);
void* allocate_commpage_entry(int entry, size_t size);
void* fill_commpage_entry(int entry, const void* copyFrom, size_t size);
image_id get_commpage_image();
// implemented in the architecture specific part
status_t arch_commpage_init(void);
// implemented in the architecture specific part
status_t arch_commpage_init_post_cpus(void);
#ifdef __cplusplus
} // extern "C"
@@ -3,7 +3,6 @@
* Distributed under the terms of the MIT License.
*/
#include <commpage.h>
#include <string.h>
@@ -15,7 +14,6 @@
#include <smp.h>
status_t
arch_commpage_init(void)
{
@@ -27,3 +25,9 @@ arch_commpage_init(void)
return B_OK;
}
status_t
arch_commpage_init_post_cpus(void)
{
return B_OK;
}
+6 -3
View File
@@ -3,7 +3,6 @@
* Distributed under the terms of the MIT License.
*/
#include <commpage.h>
#include <string.h>
@@ -14,8 +13,6 @@
#include <smp.h>
status_t
arch_commpage_init(void)
{
@@ -24,3 +21,9 @@ arch_commpage_init(void)
return B_OK;
}
status_t
arch_commpage_init_post_cpus(void)
{
return B_OK;
}
+8 -1
View File
@@ -1,4 +1,5 @@
/*
* Copyright 2008-2009, Ingo Weinhold, [email protected].
* Copyright 2007, Travis Geiselbrecht. All rights reserved.
* Distributed under the terms of the MIT License.
*/
@@ -103,10 +104,16 @@ initialize_commpage_syscall(void)
status_t
arch_commpage_init(void)
{
return B_OK;
}
status_t
arch_commpage_init_post_cpus(void)
{
// select the optimum syscall mechanism and patch the commpage
initialize_commpage_syscall();
return B_OK;
}
+6
View File
@@ -89,3 +89,9 @@ commpage_init(void)
return B_OK;
}
status_t
commpage_init_post_cpus(void)
{
return arch_commpage_init_post_cpus();
}
+2
View File
@@ -249,6 +249,8 @@ main2(void *unused)
boot_splash_init(sKernelArgs.boot_splash);
commpage_init_post_cpus();
TRACE("Init modules\n");
boot_splash_set_stage(BOOT_SPLASH_STAGE_1_INIT_MODULES);
module_init_post_threads();