summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-05-18 10:29:30 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-05-18 10:29:30 +0200
commit163f32fbfbfa2fb0744787769fb3d4865f57d8dd (patch)
treea28226f575585bda679d526b337324d10ce0e365
parente42b9ddb9121cd69cfb6b5bc0d7efc31653b72a0 (diff)
feat(kernel{sched/hal}): int 3 if something is wrong in `sched_jump_to_task`
why: - After the image's entry is done, and no exit is called. also: - Added sched_idle_task to CPS's API. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--dev/kernel/HALKit/AMD64/HalCommonAPI.asm7
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc6
-rw-r--r--dev/kernel/HALKit/AMD64/HalKernelMain.cc8
-rw-r--r--dev/kernel/KernelKit/CoreProcessScheduler.h2
4 files changed, 12 insertions, 11 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalCommonAPI.asm b/dev/kernel/HALKit/AMD64/HalCommonAPI.asm
index 432f79d3..a04aeb95 100644
--- a/dev/kernel/HALKit/AMD64/HalCommonAPI.asm
+++ b/dev/kernel/HALKit/AMD64/HalCommonAPI.asm
@@ -99,12 +99,13 @@ sched_jump_to_task:
mov r15, [rcx + 0x48]
mov rax, [rcx + 0x00]
- mov rsp, [rcx + 0x08] ; SP
+ mov rsp, [rcx + 0x08]
jmp rax
+ int 3 ;; Never continue here.
-global rtl_ne_task
+global sched_idle_task
-rtl_ne_task:
+sched_idle_task:
jmp $
ret \ No newline at end of file
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
index 00c206f0..7e2b8957 100644
--- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
@@ -20,11 +20,11 @@ STATIC BOOL kIsRunning = NO;
STATIC void hal_idt_send_eoi(UInt8 vector) {
((volatile UInt32*) kApicBaseAddress)[0xB0 / 4] = 0;
- if (vector >= 0x20 && vector <= 0x2F) {
+ if (vector >= kPICCommand && vector <= 0x2F) {
if (vector >= 0x28) {
- Kernel::HAL::rt_out8(0xA0, 0x20);
+ Kernel::HAL::rt_out8(kPIC2Command, kPICCommand);
}
- Kernel::HAL::rt_out8(0x20, 0x20);
+ Kernel::HAL::rt_out8(kPICCommand, kPICCommand);
}
kIsRunning = NO;
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
index 00dafc7b..581af60a 100644
--- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
@@ -103,12 +103,10 @@ EXTERN_C Int32 hal_init_platform(Kernel::HEL::BootInfoHeader* handover_hdr) {
return kEfiFail;
}
-EXTERN_C void rtl_ne_task(void);
-
EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept {
- Kernel::rtl_create_user_process(rtl_ne_task, "MgmtSrv");
- Kernel::rtl_create_user_process(rtl_ne_task, "LaunchSrv");
- Kernel::rtl_create_user_process(rtl_ne_task, "SecSrv");
+ Kernel::rtl_create_user_process(sched_idle_task, "MgmtSrv"); //! Mgmt command server.
+ Kernel::rtl_create_user_process(sched_idle_task, "LaunchSrv"); //! launchd
+ Kernel::rtl_create_user_process(sched_idle_task, "SecSrv"); //! Login Server
Kernel::HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
diff --git a/dev/kernel/KernelKit/CoreProcessScheduler.h b/dev/kernel/KernelKit/CoreProcessScheduler.h
index 6cb17261..6ac55424 100644
--- a/dev/kernel/KernelKit/CoreProcessScheduler.h
+++ b/dev/kernel/KernelKit/CoreProcessScheduler.h
@@ -19,6 +19,8 @@
#define kSchedNameLen (128U)
+EXTERN_C void sched_idle_task(void);
+
namespace Kernel {
class USER_PROCESS;
class KERNEL_TASK;