]> 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 6a8062cef8151e181cb08708c77be8ffbf1d3233..a8785ccad5d1a8ca7073fd2897b1cc521759a870 100644 (file)
@@ -2,7 +2,10 @@
 #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 f58ba73bc7128d49fa9ee854abf35034208ee084..ef09a7f56c67548ba492c598c7ad9e9e87db4882 100644 (file)
@@ -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;
+}
index f58ba73bc7128d49fa9ee854abf35034208ee084..ef09a7f56c67548ba492c598c7ad9e9e87db4882 100644 (file)
@@ -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;
+}
index f58ba73bc7128d49fa9ee854abf35034208ee084..ef09a7f56c67548ba492c598c7ad9e9e87db4882 100644 (file)
@@ -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;
+}
index 16219c8d7bc3250af84eaa400b7d05fcf5104d71..85989834ae70e6944585bcddf399b5973c5bb0d2 100644 (file)
@@ -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
+}
index 43a8b03ce8c3f46949e333599df1cc12f352e396..71884e7e28dd99464e73a63921325c962dfd9e92 100644 (file)
@@ -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 <stddef.h>
 
 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(&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) {