summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/src/BitMapMgr.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-01-11 16:30:07 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-01-11 16:30:07 +0100
commitbb790af9762e48812962c6d328fe90bb4ec91432 (patch)
tree9dd2562015da8a900826222f3691d1c3a8591dc3 /dev/Kernel/src/BitMapMgr.cc
parent8360742fdf9f1964ae016e99a47ddaf2c770e908 (diff)
ADD: Better memory management, filesystem lookup and tweaks.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/src/BitMapMgr.cc')
-rw-r--r--dev/Kernel/src/BitMapMgr.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/dev/Kernel/src/BitMapMgr.cc b/dev/Kernel/src/BitMapMgr.cc
index aa32cb93..63666f3e 100644
--- a/dev/Kernel/src/BitMapMgr.cc
+++ b/dev/Kernel/src/BitMapMgr.cc
@@ -15,7 +15,8 @@
#include <NewKit/Defines.h>
#include <NewKit/KernelPanic.h>
-#define kBitMapMagic (0x10210U)
+#define kBitMapMagic (0x10210U)
+#define kBitMapPadSize (mib_cast(16))
#define kBitMapMagIdx (0U)
#define kBitMapSizeIdx (1U)
@@ -87,12 +88,13 @@ namespace Kernel
VoidPtr base = reinterpret_cast<VoidPtr>(((UIntPtr)base_ptr) + kPageSize);
- while (((UIntPtr)base) < (reinterpret_cast<UIntPtr>(base) + kHandoverHeader->f_BitMapSize))
+ while (YES)
{
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(base);
if (ptr_bit_set[kBitMapMagIdx] == kBitMapMagic &&
- ptr_bit_set[kBitMapSizeIdx] <= size)
+ ptr_bit_set[kBitMapSizeIdx] <= size &&
+ !ptr_bit_set[kBitMapUsedIdx])
{
if (ptr_bit_set[kBitMapUsedIdx] == No)
{
@@ -121,7 +123,7 @@ namespace Kernel
return (VoidPtr)ptr_bit_set;
}
- base = reinterpret_cast<VoidPtr>(reinterpret_cast<UIntPtr>(base) + ((ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) ? size : ptr_bit_set[kBitMapSizeIdx]));
+ base = reinterpret_cast<VoidPtr>(reinterpret_cast<UIntPtr>(base) + ((ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) ? (size) : ptr_bit_set[kBitMapSizeIdx]));
}
return nullptr;