diff options
author | Ian Moffett <ian@osmora.org> | 2024-01-10 18:58:15 -0500 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-01-10 18:58:15 -0500 |
commit | 3de50c965376fa47e664f2f2701b339765763767 (patch) | |
tree | 38cf5ce8f222c4a3a646e7ca3d401456f5032a79 | |
parent | a4e6328b6e91d582c4579554c293995e3d4f8851 (diff) |
kernel/amd64: machdep: Add pre_init()
This commit introduces a pre_init() function for setting up
things that processor_init() may depend on
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | sys/arch/amd64/amd64/machdep.c | 18 | ||||
-rw-r--r-- | sys/include/sys/machdep.h | 1 | ||||
-rw-r--r-- | sys/kern/init_main.c | 1 |
3 files changed, 16 insertions, 4 deletions
diff --git a/sys/arch/amd64/amd64/machdep.c b/sys/arch/amd64/amd64/machdep.c index 1000ebf..ec1d48f 100644 --- a/sys/arch/amd64/amd64/machdep.c +++ b/sys/arch/amd64/amd64/machdep.c @@ -80,6 +80,20 @@ processor_halt(void) __ASMV("cli; hlt"); } +/* + * Things set up before processor_init() call... + */ +void +pre_init(void) +{ + /* + * These are critical things that need to be set up as soon as possible + * way before the processor_init() call. + */ + interrupts_init(); + gdt_load(&g_gdtr); +} + void processor_init(void) { @@ -88,9 +102,6 @@ processor_init(void) struct cpu_info *cur_cpu = this_cpu(); - interrupts_init(); - gdt_load(&g_gdtr); - CPU_INFO_LOCK(cur_cpu); init_tss(cur_cpu); @@ -114,5 +125,4 @@ processor_init(void) /* Use spectre mitigation if enabled */ if (try_spectre_mitigate != NULL) try_spectre_mitigate(); - } diff --git a/sys/include/sys/machdep.h b/sys/include/sys/machdep.h index c337b17..f494f73 100644 --- a/sys/include/sys/machdep.h +++ b/sys/include/sys/machdep.h @@ -36,6 +36,7 @@ #if defined(_KERNEL) __weak void processor_init(void); +__weak void pre_init(void); __weak void processor_halt(void); #endif /* defined(_KERNEL) */ diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 8158bd0..8b8e431 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -73,6 +73,7 @@ list_timers(void) void main(void) { + pre_init(); tty_init(); syslog_init(); PRINT_LOGO(); |