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 | |
| 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')
| -rw-r--r-- | dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx | 5 | ||||
| -rw-r--r-- | dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/HardwareThreadScheduler.hxx (renamed from dev/ZKA/KernelKit/MP.hxx) | 0 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/UserProcessScheduler.hxx | 12 | ||||
| -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 |
6 files changed, 23 insertions, 10 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx index 1be22e7d..b49a688f 100644 --- a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx +++ b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx @@ -28,6 +28,11 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) Kernel::ke_stop(RUNTIME_CHECK_PROCESS); } +EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) +{ + Kernel::UserProcessHelper::StartScheduling(); +} + /// @brief Handle math fault. /// @param rsp EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) diff --git a/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx b/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx index f985deb7..5f6c0552 100644 --- a/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx +++ b/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx @@ -16,7 +16,7 @@ // Needed for SMP. // #include <FirmwareKit/EFI.hxx> -#include <KernelKit/MP.hxx> +#include <KernelKit/HardwareThreadScheduler.hxx> #define kApicSignature "APIC" diff --git a/dev/ZKA/KernelKit/MP.hxx b/dev/ZKA/KernelKit/HardwareThreadScheduler.hxx index cf5d6754..cf5d6754 100644 --- a/dev/ZKA/KernelKit/MP.hxx +++ b/dev/ZKA/KernelKit/HardwareThreadScheduler.hxx diff --git a/dev/ZKA/KernelKit/UserProcessScheduler.hxx b/dev/ZKA/KernelKit/UserProcessScheduler.hxx index d5172fe9..9585da29 100644 --- a/dev/ZKA/KernelKit/UserProcessScheduler.hxx +++ b/dev/ZKA/KernelKit/UserProcessScheduler.hxx @@ -52,12 +52,12 @@ namespace Kernel //! to run. enum class AffinityKind : Int32 { - kRealTime = 0500, - kVeryHigh = 2500, - kHigh = 2000, - kStandard = 1500, - kLowUsage = 1000, - kVeryLowUsage = 5000, + kRealTime = 500, + kVeryHigh = 250, + kHigh = 200, + kStandard = 1000, + kLowUsage = 1500, + kVeryLowUsage = 2000, }; // operator overloading. 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; + } } } |
