From 683b9bbf07cd85105ca1ab9e926f140d6e78b7fc Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Wed, 20 Nov 2013 21:21:31 +0100 Subject: [PATCH] scheduler: Improve power saving mode, part 2 Consequences of committing & pushing too quickly... --- src/system/kernel/scheduler/power_saving.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/system/kernel/scheduler/power_saving.cpp b/src/system/kernel/scheduler/power_saving.cpp index a3fba22f1f..ac848e9ab0 100644 --- a/src/system/kernel/scheduler/power_saving.cpp +++ b/src/system/kernel/scheduler/power_saving.cpp @@ -110,8 +110,8 @@ should_rebalance(Thread* thread) CoreEntry* coreEntry = &gCoreEntries[core]; if (coreEntry->fLoad > kHighLoad) { + SpinLocker coreLocker(gCoreHeapsLock); if (sSmallTaskCore == core) { - SpinLocker coreLocker(gCoreHeapsLock); CoreEntry* other = gCoreLoadHeap->PeekMaximum(); if (other == NULL) @@ -122,15 +122,14 @@ should_rebalance(Thread* thread) sSmallTaskCore = other->fCoreID; return coreEntry->fLoad > kVeryHighLoad; } - } else if (coreEntry->fLoad < kHighLoad) { - int32 newCore = choose_small_task_core(); - return newCore != core; + + CoreEntry* other = gCoreHighLoadHeap->PeekMinimum(); + if (other == NULL) + other = gCoreHighLoadHeap->PeekMaximum(); + return coreEntry->fLoad - other->fLoad >= kLoadDifference / 2; } - CoreEntry* other = gCoreHighLoadHeap->PeekMinimum(); - if (other == NULL) - return false; - return coreEntry->fLoad - other->fLoad >= kLoadDifference / 2; + return choose_small_task_core() != core; }