summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-31 15:29:28 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-31 15:30:56 +0200
commit20df23fab3e0c7c3b0559585622345f20b25e9be (patch)
treeab4ea9c70f88fdd9e6d2563fcf69cc78d418baac /dev
parente2a90fce95fde6eaef50e6d99e32b902ec14cc0d (diff)
WIP: Work in progress user scheduler, SMP version is next after that
one. TODO: Finish to fix the last issues. TODO2: When done, extended the SCI. TODO3: After that load a PEF executable. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
-rw-r--r--dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx4
-rw-r--r--dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx1
-rw-r--r--dev/ZKA/Sources/CodeManager.cxx7
-rw-r--r--dev/ZKA/Sources/KernelCheck.cxx2
-rw-r--r--dev/ZKA/Sources/PEFCodeManager.cxx6
-rw-r--r--dev/ZKA/Sources/UserProcessScheduler.cxx2
6 files changed, 16 insertions, 6 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
index 99b784be..1e9e6ec1 100644
--- a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
@@ -20,6 +20,7 @@ EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp)
EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
{
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
+ Kernel::ke_stop(RUNTIME_CHECK_PROCESS);
}
/// @brief Handle math fault.
@@ -27,6 +28,7 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
{
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
+ Kernel::ke_stop(RUNTIME_CHECK_PROCESS);
}
/// @brief Handle any generic fault.
@@ -34,6 +36,7 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
{
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
+ Kernel::ke_stop(RUNTIME_CHECK_PROCESS);
}
/// @brief Handle #UD fault.
@@ -41,6 +44,7 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp)
{
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
+ Kernel::ke_stop(RUNTIME_CHECK_PROCESS);
}
/// @brief Enter syscall from assembly.
diff --git a/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx b/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx
index a63328ab..3897cb6a 100644
--- a/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx
@@ -14,7 +14,6 @@ Void UserProcess::SetEntrypoint(VoidPtr imageStart) noexcept
if (imageStart == nullptr)
this->Crash();
-
VoidPtr cr3_pd;
asm volatile(
diff --git a/dev/ZKA/Sources/CodeManager.cxx b/dev/ZKA/Sources/CodeManager.cxx
index f50457a4..585c7c01 100644
--- a/dev/ZKA/Sources/CodeManager.cxx
+++ b/dev/ZKA/Sources/CodeManager.cxx
@@ -19,8 +19,11 @@ namespace Kernel
if (!main)
return false;
- UserProcess proc;
- proc.SetEntrypoint(reinterpret_cast<VoidPtr>(main));
+ UserProcess proc((VoidPtr)main);
+
+ if (mm_is_valid_heap((VoidPtr)main))
+ proc.SetEntrypoint(reinterpret_cast<VoidPtr>(main));
+
proc.Kind = UserProcess::kExeKind;
proc.StackSize = mib_cast(1);
diff --git a/dev/ZKA/Sources/KernelCheck.cxx b/dev/ZKA/Sources/KernelCheck.cxx
index 8e5f0827..db157601 100644
--- a/dev/ZKA/Sources/KernelCheck.cxx
+++ b/dev/ZKA/Sources/KernelCheck.cxx
@@ -55,7 +55,7 @@ namespace Kernel
switch (id)
{
case RUNTIME_CHECK_PROCESS: {
- CGDrawString("0x00000008 UserProcess execution fault, this is a catasrophic failure.", start_y, x, panicTxt);
+ CGDrawString("0x00000008 No more processes to run, this is because that ZKA ran out of processes.", start_y, x, panicTxt);
break;
}
case RUNTIME_CHECK_ACPI: {
diff --git a/dev/ZKA/Sources/PEFCodeManager.cxx b/dev/ZKA/Sources/PEFCodeManager.cxx
index 5b797ee3..3d740a87 100644
--- a/dev/ZKA/Sources/PEFCodeManager.cxx
+++ b/dev/ZKA/Sources/PEFCodeManager.cxx
@@ -202,12 +202,14 @@ namespace Kernel
UserProcess proc;
proc.SetEntrypoint(errOrStart.Leak().Leak());
- proc.Kind = procKind;
+ proc.Kind = procKind;
proc.StackSize = *(UIntPtr*)exec.FindSymbol("__STACK_SIZE", kPefData);
if (!proc.StackSize)
{
- proc.StackSize = mib_cast(8);
+ const auto cDefaultStackSizeMib = 8;
+
+ proc.StackSize = mib_cast(cDefaultStackSizeMib);
}
return UserProcessScheduler::The().Add(proc);
diff --git a/dev/ZKA/Sources/UserProcessScheduler.cxx b/dev/ZKA/Sources/UserProcessScheduler.cxx
index b5d9660c..b762f1cd 100644
--- a/dev/ZKA/Sources/UserProcessScheduler.cxx
+++ b/dev/ZKA/Sources/UserProcessScheduler.cxx
@@ -58,6 +58,8 @@ namespace Kernel
this->Status = ProcessStatus::kDead;
this->Exit(kErrorProcessFault);
+
+ ProcessHelper::StartScheduling();
}
/// @brief Gets the local last exit code.