diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-20 13:46:07 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-20 13:46:07 +0200 |
| commit | bec0e457ad346783be7f84be71bb0eddc881847c (patch) | |
| tree | 337f59719b2fc10d03b2253630bb88b28a6c6839 /dev/kernel/HALKit | |
| parent | 9978ec66ff0e5fc98892c089c47637f0d164bc46 (diff) | |
wip: feat(kernel): Add stub for ring-3 switch on the AP side of the
scheduling system.
why?
- To let the code run in user mode, as specified in the design.
next:
- Debug the #06 interrupt when switching to task.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 6 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalCommonAPI.asm | 11 |
2 files changed, 10 insertions, 7 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 78db9b16..46ad8fd6 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -112,12 +112,10 @@ EXTERN_C BOOL mp_register_process(HAL::StackFramePtr stack_frame, ProcessID thrd kHWThread[thrdid].mFramePtr = stack_frame; kHWThread[thrdid].mThreadID = thrdid; - STATIC HardwareTimer timer{rtl_milliseconds(1000)}; - - timer.Wait(); - HardwareThreadScheduler::The()[thrdid].Leak()->Busy(NO); + sched_jump_to_task(stack_frame); + return YES; } diff --git a/dev/kernel/HALKit/AMD64/HalCommonAPI.asm b/dev/kernel/HALKit/AMD64/HalCommonAPI.asm index a04aeb95..230f50ed 100644 --- a/dev/kernel/HALKit/AMD64/HalCommonAPI.asm +++ b/dev/kernel/HALKit/AMD64/HalCommonAPI.asm @@ -84,11 +84,16 @@ section .text global sched_jump_to_task -;; Jump to the task from its stack frame. sched_jump_to_task: push rbp mov rbp, rsp + mov ax, 0x20 + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov r8, [rcx + 0x10] mov r9, [rcx + 0x18] mov r10, [rcx + 0x20] @@ -101,11 +106,11 @@ sched_jump_to_task: mov rax, [rcx + 0x00] mov rsp, [rcx + 0x08] - jmp rax + o64 sysret int 3 ;; Never continue here. global sched_idle_task sched_idle_task: jmp $ - ret
\ No newline at end of file + ret |
