diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-09-05 11:54:27 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-09-05 11:54:27 +0200 |
| commit | 3e2b931d65582284e9716c42a902cab6d279c7f0 (patch) | |
| tree | c3514953c6930e1eb465dcfb5ff1300154ade965 /dev/ZKA/Sources | |
| parent | 270223aea3a48f2d250525869c30fff418356ef3 (diff) | |
[ IMP ] Add Interrupt for scheduler (for APIC, maybe PIT?)
[ IMP ] Fixed user scheduler context switching.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKA/Sources')
| -rw-r--r-- | dev/ZKA/Sources/HardwareThreadScheduler.cxx (renamed from dev/ZKA/Sources/MP.cxx) | 5 | ||||
| -rw-r--r-- | dev/ZKA/Sources/UserProcessScheduler.cxx | 9 |
2 files changed, 11 insertions, 3 deletions
diff --git a/dev/ZKA/Sources/MP.cxx b/dev/ZKA/Sources/HardwareThreadScheduler.cxx index 0e109b66..b130ef63 100644 --- a/dev/ZKA/Sources/MP.cxx +++ b/dev/ZKA/Sources/HardwareThreadScheduler.cxx @@ -6,7 +6,7 @@ #include <ArchKit/ArchKit.hxx> #include <KernelKit/UserProcessScheduler.hxx> -#include <KernelKit/MP.hxx> +#include <KernelKit/HardwareThreadScheduler.hxx> #include <CFKit/Property.hxx> ///! BUGS: 0 @@ -90,6 +90,9 @@ namespace Kernel !stack_ptr) return false; + if (this->IsBusy()) + return false; + fStack = frame; if (kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled) diff --git a/dev/ZKA/Sources/UserProcessScheduler.cxx b/dev/ZKA/Sources/UserProcessScheduler.cxx index 733e19ed..4e0c8902 100644 --- a/dev/ZKA/Sources/UserProcessScheduler.cxx +++ b/dev/ZKA/Sources/UserProcessScheduler.cxx @@ -11,7 +11,7 @@ #include <KernelKit/UserProcessScheduler.hxx> #include <KernelKit/IPEFDLLObject.hxx> -#include <KernelKit/MP.hxx> +#include <KernelKit/HardwareThreadScheduler.hxx> #include <KernelKit/Heap.hxx> #include <NewKit/String.hxx> #include <KernelKit/LPC.hxx> @@ -435,11 +435,16 @@ namespace Kernel HardwareThreadScheduler::The()[index].Leak()->Kind() != ThreadKind::kHartSystemReserved) { + PID prev_pid = UserProcessHelper::TheCurrentPID(); UserProcessHelper::TheCurrentPID() = new_pid; bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr); - return ret; + if (!ret) + { + UserProcessHelper::TheCurrentPID() = prev_pid; + continue; + } } } |
