From 3de50c965376fa47e664f2f2701b339765763767 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Wed, 10 Jan 2024 18:58:15 -0500 Subject: 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 --- sys/arch/amd64/amd64/machdep.c | 18 ++++++++++++++---- sys/include/sys/machdep.h | 1 + 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(); -- cgit v1.2.3