summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src/BitMapMgr.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-21 03:30:40 -0500
committerGitHub <noreply@github.com>2025-11-21 03:30:40 -0500
commite3fa27827e7647a0ecc466f4d92097fe48fbbb43 (patch)
tree33ba30655f555d37e3c970707b27413936e5a9ad /dev/kernel/src/BitMapMgr.cc
parentc739255b48b3a5b2e184ca1a637f9f1f95c978ff (diff)
parentefefa7221a3fea3636a64f2bf067e2af75626f34 (diff)
Merge pull request #79 from nekernel-org/devv0.0.61
Kernel: OpenHeFS fixes and new components.
Diffstat (limited to 'dev/kernel/src/BitMapMgr.cc')
-rw-r--r--dev/kernel/src/BitMapMgr.cc23
1 files changed, 10 insertions, 13 deletions
diff --git a/dev/kernel/src/BitMapMgr.cc b/dev/kernel/src/BitMapMgr.cc
index 2039e1c9..d7ecb810 100644
--- a/dev/kernel/src/BitMapMgr.cc
+++ b/dev/kernel/src/BitMapMgr.cc
@@ -88,9 +88,10 @@ namespace HAL {
}
VoidPtr base = reinterpret_cast<VoidPtr>((UIntPtr) base_ptr);
-
MUST_PASS(base);
+ if (!base) return nullptr;
+
STATIC SizeT biggest = 0UL;
while (YES) {
@@ -105,7 +106,7 @@ namespace HAL {
this->GetBitMapStatus(ptr_bit_set);
UInt32 flags = this->MakeMMFlags(wr, user);
- mm_map_page(ptr_bit_set, ptr_bit_set, flags);
+ mm_map_page(ptr_bit_set, (VoidPtr)mm_get_page_addr(ptr_bit_set), flags);
if (biggest < (size + pad)) biggest = size + pad;
@@ -121,7 +122,7 @@ namespace HAL {
this->GetBitMapStatus(ptr_bit_set);
UInt32 flags = this->MakeMMFlags(wr, user);
- mm_map_page(ptr_bit_set, ptr_bit_set, flags);
+ mm_map_page(ptr_bit_set, (VoidPtr)mm_get_page_addr(ptr_bit_set), flags);
if (biggest < (size + pad)) biggest = (size + pad);
@@ -136,7 +137,6 @@ namespace HAL {
: ptr_bit_set[kBitMapSizeIdx];
base = reinterpret_cast<VoidPtr>(raw_base + offset);
-
if (base == nullptr) return nullptr;
}
@@ -166,9 +166,10 @@ namespace HAL {
};
} // namespace Detail
+ STATIC Detail::IBitMapProxy kBitMapMgr;
+
auto mm_is_bitmap(VoidPtr ptr) -> BOOL {
- Detail::IBitMapProxy bitmp;
- return bitmp.IsBitMap(ptr);
+ return kBitMapMgr.IsBitMap(ptr);
}
/***********************************************************************************/
@@ -178,12 +179,10 @@ namespace HAL {
/// @return a new bitmap allocated pointer.
/***********************************************************************************/
auto mm_alloc_bitmap(Boolean wr, Boolean user, SizeT size, Bool is_page, SizeT pad) -> VoidPtr {
- VoidPtr ptr_new = nullptr;
- Detail::IBitMapProxy bitmp;
-
+ VoidPtr ptr_new = nullptr;
if (is_page) return nullptr;
- ptr_new = bitmp.FindBitMap(kKernelBitMpStart, size, wr, user, pad);
+ ptr_new = kBitMapMgr.FindBitMap(kKernelBitMpStart, size, wr, user, pad);
if (!ptr_new) {
ke_panic(RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM, "Out of memory bitmap");
@@ -200,9 +199,7 @@ namespace HAL {
auto mm_free_bitmap(VoidPtr ptr) -> Bool {
if (!ptr) return No;
- Detail::IBitMapProxy bitmp;
- Bool ret = bitmp.FreeBitMap(ptr);
-
+ Bool ret = kBitMapMgr.FreeBitMap(ptr);
return ret;
}
} // namespace HAL