summaryrefslogtreecommitdiffhomepage
path: root/dev/zka/src/UserProcessScheduler.cxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-10-13 15:29:55 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-10-13 15:29:55 +0200
commit7477a0f942c374b652da4f80cdb36d4661aac3c8 (patch)
treed06627de4689b5661f4b95c4fa15f932b004ad13 /dev/zka/src/UserProcessScheduler.cxx
parent182f2baa4d38a286d3453cc0da90ebec5fb25266 (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.cxx34
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;