From: Tulio A M Mendes Date: Tue, 10 Feb 2026 05:53:40 +0000 (-0300) Subject: refactor: remove #if x86 guard from scheduler fork_child_trampoline X-Git-Url: https://projects.tadryanom.me/docs/static/gitweb.js?a=commitdiff_plain;h=761b8e96ab68d5b6c7e430fbb9bdaccaaf02b15f;p=AdrOS.git refactor: remove #if x86 guard from scheduler fork_child_trampoline Add hal_usermode_enter_regs() to the HAL usermode interface so fork_child_trampoline() can call it generically without #if x86. - Add declaration to include/hal/usermode.h - Implement in src/hal/x86/usermode.c (calls x86_enter_usermode_regs) - Add stubs in ARM, RISC-V, MIPS HAL usermode.c - scheduler.c now uses hal_usermode_enter_regs() with no guards Passes: make, cppcheck, QEMU smoke test. --- diff --git a/include/hal/usermode.h b/include/hal/usermode.h index 6a8062c..a8785cc 100644 --- a/include/hal/usermode.h +++ b/include/hal/usermode.h @@ -2,7 +2,10 @@ #define HAL_USERMODE_H #include +#include "interrupts.h" int hal_usermode_enter(uintptr_t user_eip, uintptr_t user_esp); +void hal_usermode_enter_regs(const struct registers* regs); + #endif diff --git a/src/hal/arm/usermode.c b/src/hal/arm/usermode.c index f58ba73..ef09a7f 100644 --- a/src/hal/arm/usermode.c +++ b/src/hal/arm/usermode.c @@ -5,3 +5,7 @@ int hal_usermode_enter(uintptr_t user_eip, uintptr_t user_esp) { (void)user_esp; return -1; } + +void hal_usermode_enter_regs(const struct registers* regs) { + (void)regs; +} diff --git a/src/hal/mips/usermode.c b/src/hal/mips/usermode.c index f58ba73..ef09a7f 100644 --- a/src/hal/mips/usermode.c +++ b/src/hal/mips/usermode.c @@ -5,3 +5,7 @@ int hal_usermode_enter(uintptr_t user_eip, uintptr_t user_esp) { (void)user_esp; return -1; } + +void hal_usermode_enter_regs(const struct registers* regs) { + (void)regs; +} diff --git a/src/hal/riscv/usermode.c b/src/hal/riscv/usermode.c index f58ba73..ef09a7f 100644 --- a/src/hal/riscv/usermode.c +++ b/src/hal/riscv/usermode.c @@ -5,3 +5,7 @@ int hal_usermode_enter(uintptr_t user_eip, uintptr_t user_esp) { (void)user_esp; return -1; } + +void hal_usermode_enter_regs(const struct registers* regs) { + (void)regs; +} diff --git a/src/hal/x86/usermode.c b/src/hal/x86/usermode.c index 16219c8..8598983 100644 --- a/src/hal/x86/usermode.c +++ b/src/hal/x86/usermode.c @@ -13,3 +13,11 @@ int hal_usermode_enter(uintptr_t user_eip, uintptr_t user_esp) { return -1; #endif } + +void hal_usermode_enter_regs(const struct registers* regs) { +#if defined(__i386__) + x86_enter_usermode_regs(regs); +#else + (void)regs; +#endif +} diff --git a/src/kernel/scheduler.c b/src/kernel/scheduler.c index 43a8b03..71884e7 100644 --- a/src/kernel/scheduler.c +++ b/src/kernel/scheduler.c @@ -8,9 +8,7 @@ #include "utils.h" #include "errno.h" #include "hal/cpu.h" -#if defined(__i386__) -#include "arch/x86/usermode.h" -#endif +#include "hal/usermode.h" #include struct process* current_process = NULL; @@ -333,7 +331,6 @@ void process_exit_notify(int status) { } static void fork_child_trampoline(void) { -#if defined(__i386__) if (!current_process || !current_process->has_user_regs) { process_exit_notify(1); schedule(); @@ -344,12 +341,7 @@ static void fork_child_trampoline(void) { vmm_as_activate(current_process->addr_space); } - x86_enter_usermode_regs(¤t_process->user_regs); -#else - process_exit_notify(1); - schedule(); - for (;;) hal_cpu_idle(); -#endif + hal_usermode_enter_regs(¤t_process->user_regs); } struct process* process_fork_create(uintptr_t child_as, const struct registers* child_regs) {