diff options
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 37 |
1 files changed, 2 insertions, 35 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc index 3a380a42..1e513e3f 100644 --- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc @@ -16,10 +16,6 @@ STATIC BOOL kIsScheduling = NO; EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) { auto process = Kernel::UserProcessScheduler::The().CurrentProcess(); - if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) { - MUST_PASS(NO); - } - kIsScheduling = NO; Kernel::kout << "Kernel: General Protection Fault.\r"; @@ -40,10 +36,6 @@ EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) { EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) { auto process = Kernel::UserProcessScheduler::The().CurrentProcess(); - if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) { - MUST_PASS(NO); - } - kIsScheduling = NO; Kernel::kout << "Kernel: Page Fault.\r"; @@ -58,27 +50,14 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) { process.Leak().Crash(); } -namespace Kernel::Detail { -constexpr static Int32 kTimeoutCount = 100000UL; -} - /// @brief Handle scheduler interrupt. EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) { NE_UNUSED(rsp); - static Kernel::Int64 try_count_before_brute = Kernel::Detail::kTimeoutCount; - - while (kIsScheduling) { - --try_count_before_brute; - - if (try_count_before_brute < 1) break; - } - - try_count_before_brute = Kernel::Detail::kTimeoutCount; - kIsScheduling = YES; + Kernel::kout << "Kernel: Scheduler interrupt.\r"; + kIsScheduling = YES; Kernel::UserProcessHelper::StartScheduling(); - kIsScheduling = NO; } @@ -87,10 +66,6 @@ EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) { EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) { auto process = Kernel::UserProcessScheduler::The().CurrentProcess(); - if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) { - MUST_PASS(NO); - } - kIsScheduling = NO; Kernel::kout << "Kernel: Math error (division by zero?).\r"; @@ -111,10 +86,6 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) { EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) { auto process = Kernel::UserProcessScheduler::The().CurrentProcess(); - if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) { - MUST_PASS(NO); - } - kIsScheduling = NO; Kernel::kout << "Kernel: Generic Process Fault.\r"; @@ -163,10 +134,6 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) { EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) { auto process = Kernel::UserProcessScheduler::The().CurrentProcess(); - if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) { - MUST_PASS(NO); - } - kIsScheduling = NO; Kernel::kout << "Kernel: Undefined Opcode.\r"; |
