]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
refactor: remove #if x86 guard from scheduler fork_child_trampoline
authorTulio A M Mendes <[email protected]>
Tue, 10 Feb 2026 05:53:40 +0000 (02:53 -0300)
committerTulio A M Mendes <[email protected]>
Tue, 10 Feb 2026 05:53:40 +0000 (02:53 -0300)
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.

include/hal/usermode.h
src/hal/arm/usermode.c
src/hal/mips/usermode.c
src/hal/riscv/usermode.c
src/hal/x86/usermode.c
src/kernel/scheduler.c

index d9bb1f177c6b5245422501f35b7bdef4e9dc65c5..acba1737f51843882d98c42056f5a1f132ddafc0 100644 (file)
 #define HAL_USERMODE_H
 
 #include <stdint.h>
+#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
index b4aba66d03b38f3ebabfc017770e3dfd7d33ae55..222645af6d536fafaed72404be4927826d177c37 100644 (file)
@@ -14,3 +14,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;
+}
index b4aba66d03b38f3ebabfc017770e3dfd7d33ae55..222645af6d536fafaed72404be4927826d177c37 100644 (file)
@@ -14,3 +14,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;
+}
index b4aba66d03b38f3ebabfc017770e3dfd7d33ae55..222645af6d536fafaed72404be4927826d177c37 100644 (file)
@@ -14,3 +14,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;
+}
index 3cce9d137ea05121e6a5c07776177a062472e16b..4ebc4e46eb39e8b28e68e6793320b137035dbffc 100644 (file)
@@ -22,3 +22,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
+}
index e3f0ba1fb2ee73c7a90f895b7f88d4816aa78707..4f1b202202b3905b298490395ea25557c06e5432 100644 (file)
@@ -17,9 +17,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 <stddef.h>
 
 struct process* current_process = NULL;
@@ -342,7 +340,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();
@@ -353,12 +350,7 @@ static void fork_child_trampoline(void) {
         vmm_as_activate(current_process->addr_space);
     }
 
-    x86_enter_usermode_regs(&current_process->user_regs);
-#else
-    process_exit_notify(1);
-    schedule();
-    for (;;) hal_cpu_idle();
-#endif
+    hal_usermode_enter_regs(&current_process->user_regs);
 }
 
 struct process* process_fork_create(uintptr_t child_as, const struct registers* child_regs) {