summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-05-01 12:07:58 +0200
committerAmlal <amlal@nekernel.org>2025-05-01 12:07:58 +0200
commitdc6c85c9344732a12f5e8f74e4cfc374b8bd391f (patch)
tree7a9f3b2a272111dce29c28a5922b968311d086c8 /dev
parentf3345dfebdc9b1668611e80f30cb5bac69db4a49 (diff)
kernel: scheduler and pef code mgr improvements.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev')
-rw-r--r--dev/kernel/HALKit/AMD64/HalKernelMain.cc2
-rw-r--r--dev/kernel/src/PEFCodeMgr.cc7
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc18
3 files changed, 22 insertions, 5 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
index 29244add..5de1b8e4 100644
--- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
@@ -144,6 +144,8 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept {
team_index = 0U;
}
+ kTeams[team_index].Id() = team_index;
+
while (!UserProcessScheduler::The().SwitchTeam(kTeams[team_index]));
timer.Wait();
diff --git a/dev/kernel/src/PEFCodeMgr.cc b/dev/kernel/src/PEFCodeMgr.cc
index 632d5baa..40a0cff9 100644
--- a/dev/kernel/src/PEFCodeMgr.cc
+++ b/dev/kernel/src/PEFCodeMgr.cc
@@ -12,6 +12,7 @@
#include <NewKit/KString.h>
#include <NewKit/KernelPanic.h>
#include <NewKit/OwnPtr.h>
+#include "KernelKit/UserProcessScheduler.h"
/// @brief PEF stack size symbol.
#define kPefStackSizeSymbol "__PEFSizeOfReserveStack"
@@ -242,7 +243,11 @@ namespace Utils {
auto stacksym = exec.FindSymbol(kPefStackSizeSymbol, kPefData);
if (!symname) {
- stacksym = ErrorOr<VoidPtr>{(VoidPtr) new UIntPtr(mib_cast(16))};
+ stacksym = ErrorOr<VoidPtr>{(VoidPtr) new UIntPtr(kSchedMaxStackSz)};
+ }
+
+ if ((*(volatile UIntPtr*)stacksym.Leak().Leak()) > kSchedMaxStackSz) {
+ *(volatile UIntPtr*)stacksym.Leak().Leak() = kSchedMaxStackSz;
}
UserProcessScheduler::The().CurrentTeam().AsArray()[id].Kind = process_kind;
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index 23ab22fa..5012e8a3 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -486,20 +486,30 @@ Bool UserProcessScheduler::HasMP() {
/***********************************************************************************/
SizeT UserProcessScheduler::Run() noexcept {
- SizeT process_index = 0UL; //! we store this guy to tell the scheduler how many
- //! things we have scheduled.
-
if (mTeam.mProcessCount < 1) {
return 0UL;
}
+ if (kCurrentlySwitching)
+ return 0UL;
+
kCurrentlySwitching = Yes;
+ SizeT process_index = 0UL; //! we store this guy to tell the scheduler how many
+ //! things we have scheduled.
+
for (; process_index < mTeam.AsArray().Capacity(); ++process_index) {
auto& process = mTeam.AsArray()[process_index];
- //! check if the process needs to be run.
+ //! Check if the process needs to be run.
if (UserProcessHelper::CanBeScheduled(process)) {
+
+ if (process.StackSize > kSchedMaxStackSz) {
+ kout << "The process: " << process.Name << ", has not a valid stack size! Crashing it...\r";
+ process.Crash();
+ continue;
+ }
+
// Set current process header.
this->CurrentProcess() = process;