diff options
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 89fe00b5..b12dc7fe 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -44,6 +44,8 @@ /////////////////////////////////////////////////////////////////////////////////////// namespace Kernel::HAL { +EXTERN_C Void sched_jump_to_task(HAL::StackFramePtr stack_frame); + struct HAL_APIC_MADT; struct HAL_HARDWARE_THREAD; @@ -59,9 +61,9 @@ STATIC Int64 kSMPCount = 0; EXTERN_C UIntPtr kApicBaseAddress; -STATIC Int32 kSMPInterrupt = 0; -STATIC UInt64 kAPICLocales[kSchedProcessLimitPerTeam] = {0}; -STATIC VoidPtr kRawMADT = nullptr; +STATIC Int32 kSMPInterrupt = 0; +STATIC UInt64 kAPICLocales[kMaxAPInsideSched] = {0}; +STATIC VoidPtr kRawMADT = nullptr; /// @brief Multiple APIC Descriptor Table. struct HAL_APIC_MADT final SDT_OBJECT { @@ -105,17 +107,11 @@ EXTERN_C HAL::StackFramePtr mp_get_current_context(Int64 pid) { } EXTERN_C BOOL mp_register_process(HAL::StackFramePtr stack_frame, ProcessID pid) { - MUST_PASS(stack_frame); - - const auto process_index = pid % kSchedProcessLimitPerTeam; - - kHWThread[process_index].mFramePtr = stack_frame; - kHWThread[process_index].mProcessID = pid; - - kHWThread[process_index].mCoreID = kAPICLocales[0]; + if (pid > kSMPCount) return NO; if (mp_is_smp()) { - /// TODO: + kHWThread[pid].mFramePtr = stack_frame; + kHWThread[pid].mProcessID = pid; return YES; } |
