summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/Kernel/src')
-rw-r--r--dev/Kernel/src/BitMapMgr.cc22
-rw-r--r--dev/Kernel/src/UserProcessScheduler.cc20
2 files changed, 23 insertions, 19 deletions
diff --git a/dev/Kernel/src/BitMapMgr.cc b/dev/Kernel/src/BitMapMgr.cc
index 1be0ed3c..c232fa4f 100644
--- a/dev/Kernel/src/BitMapMgr.cc
+++ b/dev/Kernel/src/BitMapMgr.cc
@@ -29,13 +29,13 @@ namespace Kernel
namespace Detail
{
/// \brief Proxy Interface to allocate a bitmap.
- class IBitMap final
+ class IBitMapProxy final
{
public:
- explicit IBitMap() = default;
- ~IBitMap() = default;
+ explicit IBitMapProxy() = default;
+ ~IBitMapProxy() = default;
- ZKA_COPY_DELETE(IBitMap);
+ ZKA_COPY_DELETE(IBitMapProxy);
auto IsBitMap(VoidPtr page_ptr) -> Bool
{
@@ -159,7 +159,7 @@ namespace Kernel
auto mm_is_bitmap(VoidPtr ptr) -> Bool
{
- Detail::IBitMap bitmp;
+ Detail::IBitMapProxy bitmp;
return bitmp.IsBitMap(ptr);
}
@@ -169,23 +169,25 @@ namespace Kernel
/// @return a new bitmap allocated pointer.
auto mm_alloc_bitmap(Boolean wr, Boolean user, SizeT size, Bool is_page) -> VoidPtr
{
- VoidPtr ptr_new = nullptr;
- Detail::IBitMap bitmp;
+ VoidPtr ptr_new = nullptr;
+ Detail::IBitMapProxy bitmp;
ptr_new = bitmp.FindBitMap(kKernelBitMpStart, size, wr, user);
+ MUST_PASS(ptr_new);
+
return (UIntPtr*)ptr_new;
}
- /// @brief Free Bitmap, and mark it a absent in page terms.
+ /// @brief Free Bitmap, and mark it as absent.
/// @param ptr the pointer to free.
auto mm_free_bitmap(VoidPtr ptr) -> Bool
{
if (!ptr)
return No;
- Detail::IBitMap bitmp;
- Bool ret = bitmp.FreeBitMap(ptr);
+ Detail::IBitMapProxy bitmp;
+ Bool ret = bitmp.FreeBitMap(ptr);
return ret;
}
diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc
index 30d9af27..9626296f 100644
--- a/dev/Kernel/src/UserProcessScheduler.cc
+++ b/dev/Kernel/src/UserProcessScheduler.cc
@@ -550,7 +550,7 @@ namespace Kernel
*/
/***********************************************************************************/
- Bool UserProcessHelper::Switch(VoidPtr image_ptr, UInt8* stack, HAL::StackFramePtr frame_ptr, const PID& new_pid)
+ Bool UserProcessHelper::Switch(VoidPtr image, UInt8* stack, HAL::StackFramePtr frame_ptr, const PID& new_pid)
{
for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Capacity(); ++index)
{
@@ -558,18 +558,20 @@ namespace Kernel
HardwareThreadScheduler::The()[index].Leak()->Kind() == kAPBoot)
continue;
- // a fallback is a special core for real-time tasks which needs immediate execution.
+ // A fallback is a special core for real-time tasks which needs immediate execution.
if (HardwareThreadScheduler::The()[index].Leak()->Kind() == kAPFallback)
{
if (UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].Affinity != AffinityKind::kRealTime)
continue;
- if (HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr, new_pid))
+ if (HardwareThreadScheduler::The()[index].Leak()->Switch(image, stack, frame_ptr, new_pid))
{
- auto prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime;
+ PTime prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime;
+
HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].PTime;
- PID prev_pid = UserProcessHelper::TheCurrentPID();
- UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid;
+
+ PID prev_pid = UserProcessHelper::TheCurrentPID();
+ UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid;
return YES;
}
@@ -584,7 +586,7 @@ namespace Kernel
/// Prepare task switch. ///
////////////////////////////////////////////////////////////
- Bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr, new_pid);
+ Bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image, stack, frame_ptr, new_pid);
////////////////////////////////////////////////////////////
/// Rollback on fail. ///
@@ -595,10 +597,10 @@ namespace Kernel
PID prev_pid = UserProcessHelper::TheCurrentPID();
UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid;
- auto prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime;
+ PTime prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime;
HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].PTime;
- HardwareThreadScheduler::The()[index].Leak()->Wake(NO);
+ HardwareThreadScheduler::The()[index].Leak()->Wake(YES);
break;
}