summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc')
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc37
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";