summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/Sources
diff options
context:
space:
mode:
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;
+ }
}
}