diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-18 10:29:30 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-18 10:29:30 +0200 |
| commit | 163f32fbfbfa2fb0744787769fb3d4865f57d8dd (patch) | |
| tree | a28226f575585bda679d526b337324d10ce0e365 | |
| parent | e42b9ddb9121cd69cfb6b5bc0d7efc31653b72a0 (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.asm | 7 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 6 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelMain.cc | 8 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/CoreProcessScheduler.h | 2 |
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; |
