diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-13 15:29:55 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-13 15:29:55 +0200 |
| commit | 7477a0f942c374b652da4f80cdb36d4661aac3c8 (patch) | |
| tree | d06627de4689b5661f4b95c4fa15f932b004ad13 /dev/zka/src/UserProcessScheduler.cxx | |
| parent | 182f2baa4d38a286d3453cc0da90ebec5fb25266 (diff) | |
IMP: Delete the memory list when exiting process.
IMP: Add Allocation (and delete) of MemoryList.
IMP: BitMap allocator must now allocate directories as well.
IMP: Add Handover arch to check if executable is an AMD64 executable or
ARM64 executable.
FIX: Add ::EFI::Stop, when a thread doesn't load correctly.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/zka/src/UserProcessScheduler.cxx')
| -rw-r--r-- | dev/zka/src/UserProcessScheduler.cxx | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/dev/zka/src/UserProcessScheduler.cxx b/dev/zka/src/UserProcessScheduler.cxx index 00249896..0819e638 100644 --- a/dev/zka/src/UserProcessScheduler.cxx +++ b/dev/zka/src/UserProcessScheduler.cxx @@ -12,6 +12,7 @@ /// @brief User Process scheduler. /***********************************************************************************/ +#include <ArchKit/ArchKit.hxx> #include <KernelKit/UserProcessScheduler.hxx> #include <KernelKit/IPEFDLLObject.hxx> #include <KernelKit/HardwareThreadScheduler.hxx> @@ -169,8 +170,9 @@ namespace Kernel auto pd = hal_read_cr3(); hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD)); - Bool ret = mm_delete_heap(ptr); - hal_write_cr3(reinterpret_cast<VoidPtr>(pd)); + auto ret = mm_delete_heap(entry->MemoryEntry); + + hal_write_cr3(pd); return ret; #else @@ -233,6 +235,32 @@ namespace Kernel fLastExitCode = exit_code; cLastExitCode = exit_code; + auto memory_list = this->MemoryEntryList; + + // Deleting memory lists. Make sure to free all of them. + while (memory_list) + { + if (memory_list->MemoryEntry) + { + auto pd = hal_read_cr3(); + hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD)); + + MUST_PASS(mm_delete_heap(memory_list->MemoryEntry)); + + hal_write_cr3(pd); + } + + auto next = memory_list->MemoryNext; + + mm_delete_heap(memory_list); + memory_list = nullptr; + + memory_list = next; + } + + //! Free the memory's page directory. + HAL::mm_free_bitmap(reinterpret_cast<VoidPtr>(this->MemoryPD)); + //! Delete image if not done already. if (this->Image && mm_is_valid_heap(this->Image)) mm_delete_heap(this->Image); @@ -275,7 +303,7 @@ namespace Kernel return 0; #ifdef __ZKA_AMD64__ - process.MemoryPD = reinterpret_cast<UIntPtr>(hal_read_cr3()); + process.MemoryPD = reinterpret_cast<UIntPtr>(HAL::mm_alloc_bitmap(Yes, Yes, sizeof(PDE), Yes)); #endif // __ZKA_AMD64__ process.Status = ProcessStatusKind::kStarting; |
