syscall.c used raw x86 inline assembly ('cli; hlt') in the exit
syscall idle loop. This would not compile on ARM/RISC-V/MIPS.
Add hal_cpu_disable_interrupts() to the HAL CPU interface with
implementations for x86 (cli) and stubs for other architectures.
Replace the raw asm with hal_cpu_disable_interrupts() + hal_cpu_idle().
Passes: make, cppcheck, QEMU smoke test.
void hal_cpu_set_kernel_stack(uintptr_t sp_top);
void hal_cpu_enable_interrupts(void);
+void hal_cpu_disable_interrupts(void);
void hal_cpu_idle(void);
#endif
__asm__ volatile("sti");
}
+void hal_cpu_disable_interrupts(void) {
+ __asm__ volatile("cli");
+}
+
void hal_cpu_idle(void) {
__asm__ volatile("hlt");
}
void hal_cpu_enable_interrupts(void) {
}
+void hal_cpu_disable_interrupts(void) {
+}
+
void hal_cpu_idle(void) {
}
hal_cpu_enable_interrupts();
schedule();
for(;;) {
- __asm__ volatile("cli; hlt");
+ hal_cpu_disable_interrupts();
+ hal_cpu_idle();
}
}