diff options
| author | Amlal El Mahrouss <zka-holder@mahrouss-logic.com> | 2024-10-14 05:58:38 +0000 |
|---|---|---|
| committer | Amlal El Mahrouss <zka-holder@mahrouss-logic.com> | 2024-10-14 05:58:38 +0000 |
| commit | 7ad3739afdfaa2466723467f5ef2526f171c87c3 (patch) | |
| tree | 37775f4299281598b0f5121df4c188392daebd04 /dev/zka/src/UserProcessScheduler.cxx | |
| parent | 7477a0f942c374b652da4f80cdb36d4661aac3c8 (diff) | |
| parent | d9d82713326069478e6dd212763d1fac15e65370 (diff) | |
Merge branch 'port-stage1-hello-world' into 'unstable'
IMP: Basic ARM64 port.
See merge request mahrouss/zka-dev!20
Diffstat (limited to 'dev/zka/src/UserProcessScheduler.cxx')
| -rw-r--r-- | dev/zka/src/UserProcessScheduler.cxx | 60 |
1 files changed, 42 insertions, 18 deletions
diff --git a/dev/zka/src/UserProcessScheduler.cxx b/dev/zka/src/UserProcessScheduler.cxx index 0819e638..b5a2a998 100644 --- a/dev/zka/src/UserProcessScheduler.cxx +++ b/dev/zka/src/UserProcessScheduler.cxx @@ -242,12 +242,16 @@ namespace Kernel { if (memory_list->MemoryEntry) { +#ifdef __ZKA_AMD64__ auto pd = hal_read_cr3(); hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD)); +#endif MUST_PASS(mm_delete_heap(memory_list->MemoryEntry)); +#ifdef __ZKA_AMD64__ hal_write_cr3(pd); +#endif } auto next = memory_list->MemoryNext; @@ -271,7 +275,7 @@ namespace Kernel this->Image = nullptr; this->StackFrame = nullptr; - if (this->Kind == eExecutableDLLKind) + if (this->Kind == kExectuableDLLKind) { Bool success = false; rtl_fini_dll(this, this->PefDLLDelegate, &success); @@ -317,14 +321,14 @@ namespace Kernel } // Create heap according to type of process. - if (process.Kind == UserProcess::eExecutableDLLKind) + if (process.Kind == UserProcess::kExectuableDLLKind) { process.PefDLLDelegate = rtl_init_dll(&process); } if (!process.Image) { - if (process.Kind != UserProcess::eExecutableDLLKind) + if (process.Kind != UserProcess::kExectuableDLLKind) { process.Crash(); return -kErrorProcessFault; @@ -378,12 +382,27 @@ namespace Kernel { // check if process is within range. if (process_id > mTeam.AsArray().Count()) - return false; + return No; mTeam.AsArray()[process_id].Status = ProcessStatusKind::kDead; --mTeam.mProcessAmount; - return true; + return Yes; + } + + const Bool UserProcessScheduler::IsUser() + { + return Yes; + } + + const Bool UserProcessScheduler::IsKernel() + { + return No; + } + + const Bool UserProcessScheduler::HasMP() + { + return kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled; } /***********************************************************************************/ @@ -466,7 +485,7 @@ namespace Kernel return No; if (!process.Image && - process.Kind == UserProcess::eExecutableKind) + process.Kind == UserProcess::kExectuableKind) return No; return Yes; @@ -474,27 +493,32 @@ namespace Kernel /***********************************************************************************/ /** - * @brief Scheduler helper class. + * @brief Allocate a scheduler. */ /***********************************************************************************/ - EXTERN - HardwareThreadScheduler* cHardwareThreadScheduler; //! @brief Ask linker for the hardware thread scheduler. - - SizeT UserProcessHelper::StartScheduling() + Bool UserProcessHelper::InitializeScheduling() { - if (!cHardwareThreadScheduler) - { - cHardwareThreadScheduler = mm_new_class<HardwareThreadScheduler>(); - MUST_PASS(cHardwareThreadScheduler); - } - if (!cProcessScheduler) { cProcessScheduler = mm_new_class<UserProcessScheduler>(); - MUST_PASS(cProcessScheduler); + return cProcessScheduler; } + return No; + } + + /***********************************************************************************/ + /** + * @brief Start the scheduler. + */ + /***********************************************************************************/ + + SizeT UserProcessHelper::StartScheduling() + { + if (!cProcessScheduler) + return 0; + SizeT ret = cProcessScheduler->Run(); return ret; } |
