diff --git a/headers/private/kernel/cpu.h b/headers/private/kernel/cpu.h index d3cf0a8bcd..e833a944cd 100644 --- a/headers/private/kernel/cpu.h +++ b/headers/private/kernel/cpu.h @@ -71,7 +71,6 @@ typedef struct cpu_ent { Thread* running_thread; Thread* previous_thread; bool invoke_scheduler; - bool invoke_scheduler_if_idle; bool disabled; // CPU topology information diff --git a/headers/private/kernel/smp.h b/headers/private/kernel/smp.h index aa19ad35d9..90427fb825 100644 --- a/headers/private/kernel/smp.h +++ b/headers/private/kernel/smp.h @@ -22,8 +22,7 @@ enum { SMP_MSG_GLOBAL_INVALIDATE_PAGES, SMP_MSG_CPU_HALT, SMP_MSG_CALL_FUNCTION, - SMP_MSG_RESCHEDULE, - SMP_MSG_RESCHEDULE_IF_IDLE + SMP_MSG_RESCHEDULE }; enum { diff --git a/src/system/kernel/scheduler/scheduler_affine.cpp b/src/system/kernel/scheduler/scheduler_affine.cpp index 5941b62fbf..4360c78e2b 100644 --- a/src/system/kernel/scheduler/scheduler_affine.cpp +++ b/src/system/kernel/scheduler/scheduler_affine.cpp @@ -656,10 +656,9 @@ affine_enqueue(Thread* thread, bool newOne) // reschedule anyway and update its heap key to the correct value. affine_update_priority_heaps(targetCPU, threadPriority); - if (targetCPU == smp_get_current_cpu()) { + if (targetCPU == smp_get_current_cpu()) gCPU[targetCPU].invoke_scheduler = true; - gCPU[targetCPU].invoke_scheduler_if_idle = false; - } else { + else { smp_send_ici(targetCPU, SMP_MSG_RESCHEDULE, 0, 0, 0, NULL, SMP_MSG_FLAG_ASYNC); } @@ -840,7 +839,6 @@ reschedule_event(timer *unused) thread->scheduler_data->lost_cpu = true; thread->cpu->invoke_scheduler = true; - thread->cpu->invoke_scheduler_if_idle = false; thread->cpu->preempted = 1; return B_HANDLED_INTERRUPT; } @@ -960,17 +958,6 @@ affine_reschedule(void) { Thread* oldThread = thread_get_current_thread(); - // check whether we're only supposed to reschedule, if the current thread - // is idle - if (oldThread->cpu->invoke_scheduler) { - oldThread->cpu->invoke_scheduler = false; - if (oldThread->cpu->invoke_scheduler_if_idle - && oldThread->priority != B_IDLE_PRIORITY) { - oldThread->cpu->invoke_scheduler_if_idle = false; - return; - } - } - int32 thisCPU = smp_get_current_cpu(); int32 thisCore = sCPUToCore[thisCPU]; diff --git a/src/system/kernel/scheduler/scheduler_simple.cpp b/src/system/kernel/scheduler/scheduler_simple.cpp index e02f4d34c2..e4d413b2b1 100644 --- a/src/system/kernel/scheduler/scheduler_simple.cpp +++ b/src/system/kernel/scheduler/scheduler_simple.cpp @@ -323,10 +323,9 @@ simple_enqueue(Thread* thread, bool newOne) // reschedule anyway and update its heap key to the correct value. sCPUHeap->ModifyKey(&sCPUEntries[targetCPU], threadPriority); - if (targetCPU == smp_get_current_cpu()) { + if (targetCPU == smp_get_current_cpu()) gCPU[targetCPU].invoke_scheduler = true; - gCPU[targetCPU].invoke_scheduler_if_idle = false; - } else { + else { smp_send_ici(targetCPU, SMP_MSG_RESCHEDULE, 0, 0, 0, NULL, SMP_MSG_FLAG_ASYNC); } @@ -428,7 +427,6 @@ reschedule_event(timer* /* unused */) thread->scheduler_data->lost_cpu = true; thread->cpu->invoke_scheduler = true; - thread->cpu->invoke_scheduler_if_idle = false; thread->cpu->preempted = 1; return B_HANDLED_INTERRUPT; } @@ -547,17 +545,6 @@ simple_reschedule(void) { Thread* oldThread = thread_get_current_thread(); - // check whether we're only supposed to reschedule, if the current thread - // is idle - if (oldThread->cpu->invoke_scheduler) { - oldThread->cpu->invoke_scheduler = false; - if (oldThread->cpu->invoke_scheduler_if_idle - && oldThread->priority != B_IDLE_PRIORITY) { - oldThread->cpu->invoke_scheduler_if_idle = false; - return; - } - } - int32 thisCPU = smp_get_current_cpu(); TRACE("reschedule(): cpu %ld, current thread = %ld\n", thisCPU, diff --git a/src/system/kernel/smp.cpp b/src/system/kernel/smp.cpp index bf5f7c7603..e28faf619c 100644 --- a/src/system/kernel/smp.cpp +++ b/src/system/kernel/smp.cpp @@ -740,16 +740,6 @@ process_pending_ici(int32 currentCPU) { cpu_ent* cpu = thread_get_current_thread()->cpu; cpu->invoke_scheduler = true; - cpu->invoke_scheduler_if_idle = false; - break; - } - case SMP_MSG_RESCHEDULE_IF_IDLE: - { - cpu_ent* cpu = thread_get_current_thread()->cpu; - if (!cpu->invoke_scheduler) { - cpu->invoke_scheduler = true; - cpu->invoke_scheduler_if_idle = true; - } break; }