diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-31 15:29:28 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-31 15:30:56 +0200 |
| commit | 20df23fab3e0c7c3b0559585622345f20b25e9be (patch) | |
| tree | ab4ea9c70f88fdd9e6d2563fcf69cc78d418baac /dev | |
| parent | e2a90fce95fde6eaef50e6d99e32b902ec14cc0d (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.cxx | 4 | ||||
| -rw-r--r-- | dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx | 1 | ||||
| -rw-r--r-- | dev/ZKA/Sources/CodeManager.cxx | 7 | ||||
| -rw-r--r-- | dev/ZKA/Sources/KernelCheck.cxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/Sources/PEFCodeManager.cxx | 6 | ||||
| -rw-r--r-- | dev/ZKA/Sources/UserProcessScheduler.cxx | 2 |
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. |
