summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2025-01-25 08:08:43 +0100
committerAmlal <amlal.elmahrouss@icloud.com>2025-01-25 08:08:43 +0100
commit3142554fd2e6326d8a5399b4cee904c797f9a277 (patch)
treedd8305d3d7c59fc2a7d21316955e976adec1286a /dev/Kernel
parent443cd4ef41ce7d6c75d22f6a6512fdabd90bcecc (diff)
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 <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel')
-rw-r--r--dev/Kernel/src/DriveMgr.cc5
-rw-r--r--dev/Kernel/src/UserProcessScheduler.cc11
2 files changed, 12 insertions, 4 deletions
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;