diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-01-11 16:30:07 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-01-11 16:30:07 +0100 |
| commit | bb790af9762e48812962c6d328fe90bb4ec91432 (patch) | |
| tree | 9dd2562015da8a900826222f3691d1c3a8591dc3 /dev/Kernel/src/BitMapMgr.cc | |
| parent | 8360742fdf9f1964ae016e99a47ddaf2c770e908 (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.cc | 10 |
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; |
