summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-09 17:33:20 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-09 18:48:14 +0200
commit8712d6a95984805e242f1189a5a76db2fbd5d39f (patch)
tree178786a83106351560e45b7b47196b646e063708 /dev/ZKA
parent6dbc74799f465eec249e2d8f01a472d0dd3b33c8 (diff)
FIX: Kernel related, see below.
- Allocate space for heap header as well. - Don't forget to turn user bit off, and turn present off when dealing with virtual memory. Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'dev/ZKA')
-rw-r--r--dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx2
-rw-r--r--dev/ZKA/HALKit/AMD64/HalProcessor.cxx (renamed from dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx)8
-rw-r--r--dev/ZKA/Sources/Heap.cxx10
3 files changed, 11 insertions, 9 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
index e12f3765..3d9cc90f 100644
--- a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
@@ -141,7 +141,7 @@ namespace Kernel
ptr_bit_set[0] = cBitMpMagic;
ptr_bit_set[2] = No;
- mm_map_page(page_ptr, ~eFlagsPresent);
+ mm_map_page(page_ptr, ~eFlagsPresent | ~eFlagsUser);
return true;
}
diff --git a/dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx b/dev/ZKA/HALKit/AMD64/HalProcessor.cxx
index 1df0fd5c..e2ef1902 100644
--- a/dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalProcessor.cxx
@@ -25,17 +25,17 @@ namespace Kernel::HAL
{
UInt8 cPageBitMp[cBmpPgSz] = {0}; // Bitmap to track free/used pages
- void pg_set_used(Int64 page_index)
+ Void pg_set_used(Int64 page_index)
{
cPageBitMp[page_index / 8] |= (1 << (page_index % 8));
}
- void pg_set_free(Int64 page_index)
+ Void pg_set_free(Int64 page_index)
{
cPageBitMp[page_index / 8] &= ~(1 << (page_index % 8));
}
- int pg_is_free(Int64 page_index)
+ Int32 pg_is_free(Int64 page_index)
{
return !(cPageBitMp[page_index / 8] & (1 << (page_index % 8)));
}
@@ -56,7 +56,7 @@ namespace Kernel::HAL
return nullptr; // No free page found
}
- void pg_delete(void* addr)
+ Void pg_delete(void* addr)
{
Int64 page_index = (UIntPtr)addr / cPageSz;
kcout << "Page has been freed at: " << number(page_index) << endl;
diff --git a/dev/ZKA/Sources/Heap.cxx b/dev/ZKA/Sources/Heap.cxx
index 1f9af6a2..cd46a80b 100644
--- a/dev/ZKA/Sources/Heap.cxx
+++ b/dev/ZKA/Sources/Heap.cxx
@@ -94,18 +94,20 @@ namespace Kernel
{
Detail::mm_alloc_init_timeout();
- auto szFix = sz;
+ auto sz_fix = sz;
- if (szFix == 0)
+ if (sz_fix == 0)
return nullptr;
- auto wrapper = kHeapPageMgr.Request(rw, user, No, szFix);
+ sz_fix += sizeof(Detail::HEAP_INFORMATION_BLOCK);
+
+ auto wrapper = kHeapPageMgr.Request(rw, user, No, sz_fix);
Detail::HEAP_INFORMATION_BLOCK_PTR heap_info_ptr =
reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>(
wrapper.VirtualAddress() + sizeof(Detail::HEAP_INFORMATION_BLOCK));
- heap_info_ptr->fHeapSize = szFix;
+ heap_info_ptr->fHeapSize = sz_fix;
heap_info_ptr->fMagic = kKernelHeapMagic;
heap_info_ptr->fCRC32 = No; // dont fill it for now.
heap_info_ptr->fHeapPtr = reinterpret_cast<UIntPtr>(heap_info_ptr) + sizeof(Detail::HEAP_INFORMATION_BLOCK);