From 3142554fd2e6326d8a5399b4cee904c797f9a277 Mon Sep 17 00:00:00 2001 From: Amlal Date: Sat, 25 Jan 2025 08:08:43 +0100 Subject: FIX: UserProcessScheduler.cc: Make sure that we're targeting the current process when looking at realtime processes. ADD: setup_amd64.sh: build syschk and make_ap_blob.sh Signed-off-by: Amlal --- dev/Kernel/src/DriveMgr.cc | 5 +++-- dev/Kernel/src/UserProcessScheduler.cc | 11 +++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'dev/Kernel') diff --git a/dev/Kernel/src/DriveMgr.cc b/dev/Kernel/src/DriveMgr.cc index 9968e2e6..f82a9393 100644 --- a/dev/Kernel/src/DriveMgr.cc +++ b/dev/Kernel/src/DriveMgr.cc @@ -171,14 +171,15 @@ namespace Kernel trait.fPacket.fPacketReadOnly = NO; trait.fKind = kMassStorageDisc | kEPMDrive; - kcout << "Formatted Disk is EPM (Mass Storage)\r"; + kcout << "Disk is EPM.\r"; trait.fSectorSz = block_struct.SectorSz; trait.fLbaEnd = block_struct.LbaEnd; trait.fLbaStart = block_struct.LbaStart; if (trait.fSectorSz == 0 || - trait.fLbaEnd == 0) + trait.fLbaEnd == 0 || + trait.fSectorSz == 0) { ke_panic(RUNTIME_CHECK_FAILED, "Invalid EPM partition!"); } diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index 068e190a..2b71b08b 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -95,7 +95,7 @@ namespace Kernel /// @param should_wakeup if the program shall wakeup or not. /***********************************************************************************/ - Void UserProcess::Wake(const bool should_wakeup) + Void UserProcess::Wake(const Bool should_wakeup) { this->Status = should_wakeup ? ProcessStatusKind::kRunning : ProcessStatusKind::kFrozen; @@ -513,6 +513,10 @@ namespace Kernel if (!process.Name[0]) return No; + // real time processes shouldn't wait that much. + if (process.Affinity == AffinityKind::kRealTime) + return Yes; + return process.PTime < 1; } @@ -546,7 +550,7 @@ namespace Kernel // a fallback is a special core for real-time tasks which needs immediate execution. if (HardwareThreadScheduler::The()[index].Leak()->Kind() == kAPFallback) { - if (UserProcessScheduler::The().GetCurrentProcess().Leak().Affinity != AffinityKind::kRealTime) + if (UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].Affinity != AffinityKind::kRealTime) continue; if (HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr, new_pid)) @@ -555,6 +559,9 @@ namespace Kernel continue; } + if (UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].Affinity == AffinityKind::kRealTime) + continue; + PID prev_pid = UserProcessHelper::TheCurrentPID(); UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid; -- cgit v1.2.3