summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/Sources
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-09-05 11:54:27 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-09-05 11:54:27 +0200
commit3e2b931d65582284e9716c42a902cab6d279c7f0 (patch)
treec3514953c6930e1eb465dcfb5ff1300154ade965 /dev/ZKA/Sources
parent270223aea3a48f2d250525869c30fff418356ef3 (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.cxx9
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;
+ }
}
}