From cdfc807e90c713a3c7e6698c8b255b4523b8d311 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 25 Nov 2025 10:25:30 -0500 Subject: kernel: feat{HAL, src} SMP and HwrdSched improvements, HeapMgr patches. Signed-off-by: Amlal El Mahrouss --- src/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 4 ++-- src/kernel/src/HardwareThreadScheduler.cc | 2 +- src/kernel/src/HeapMgr.cc | 5 +++-- src/kernel/src/IDylibObject.cc | 1 - 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 5a530457..02d7f885 100644 --- a/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -117,13 +117,13 @@ EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ThreadID thrdid) if (!stack_frame) return NO; if (!kSMPAware) { - sched_jump_to_task(kHWThread[thrdid].mFramePtr); + sched_jump_to_task(stack_frame); return YES; } if (thrdid > kSMPCount) return NO; - HardwareThreadScheduler::The()[thrdid].Leak()->Busy(NO); + kHWThread[thrdid].mThreadID = thrdid; kHWThread[thrdid].mFramePtr = stack_frame; return YES; diff --git a/src/kernel/src/HardwareThreadScheduler.cc b/src/kernel/src/HardwareThreadScheduler.cc index 41d927f6..577659ba 100644 --- a/src/kernel/src/HardwareThreadScheduler.cc +++ b/src/kernel/src/HardwareThreadScheduler.cc @@ -146,7 +146,7 @@ HAL::StackFramePtr HardwareThreadScheduler::Leak() noexcept { /***********************************************************************************/ Ref HardwareThreadScheduler::operator[](SizeT idx) { if (idx > kMaxAPInsideSched) { - HardwareThread* kFakeThread = nullptr; + static HardwareThread* kFakeThread = nullptr; return {kFakeThread}; } diff --git a/src/kernel/src/HeapMgr.cc b/src/kernel/src/HeapMgr.cc index 848a0377..be252b22 100644 --- a/src/kernel/src/HeapMgr.cc +++ b/src/kernel/src/HeapMgr.cc @@ -246,10 +246,11 @@ _Output Boolean mm_protect_ptr(VoidPtr heap_ptr) { reinterpret_cast((UIntPtr) heap_ptr - sizeof(Detail::MM_INFORMATION_BLOCK)); - /// if valid, present and is heap header, then compute crc32 + /// AMLALE: if valid, present and is heap header, then compute crc32 if (heap_info_ptr && heap_info_ptr->fPresent && kHeapMgrMagic == heap_info_ptr->fMagic) { + /// AMLALE: Protect only the header, information in it may change. heap_info_ptr->fCRC32 = - ke_calculate_crc32((Char*) heap_info_ptr->fOffset, heap_info_ptr->fSize); + ke_calculate_crc32((Char*) heap_info_ptr, sizeof(Detail::MM_INFORMATION_BLOCK)); return Yes; } diff --git a/src/kernel/src/IDylibObject.cc b/src/kernel/src/IDylibObject.cc index 61191af1..97aec28f 100644 --- a/src/kernel/src/IDylibObject.cc +++ b/src/kernel/src/IDylibObject.cc @@ -10,4 +10,3 @@ #include #include -using namespace Kernel; -- cgit v1.2.3