scheduler: Allow calling UpdatePriority() for disabled CPU

This commit is contained in:
Pawel Dziepak
2013-12-20 05:40:59 +01:00
parent b4552fcf9b
commit 9116eec24c
2 changed files with 8 additions and 6 deletions
+5 -6
View File
@@ -501,10 +501,9 @@ reschedule(int32 nextState)
nextThread->state = B_THREAD_RUNNING; nextThread->state = B_THREAD_RUNNING;
// update CPU heap // update CPU heap
if (!gCPU[thisCPU].disabled) { SpinLocker coreLocker(core->fCPULock);
SpinLocker coreLocker(core->fCPULock); cpu->UpdatePriority(nextThreadData->GetEffectivePriority());
cpu->UpdatePriority(nextThreadData->GetEffectivePriority()); coreLocker.Unlock();
}
// track kernel time (user time is tracked in thread_at_kernel_entry()) // track kernel time (user time is tracked in thread_at_kernel_entry())
update_thread_times(oldThread, nextThread); update_thread_times(oldThread, nextThread);
@@ -637,8 +636,6 @@ scheduler_set_cpu_enabled(int32 cpuID, bool enabled)
InterruptsBigSchedulerLocker _; InterruptsBigSchedulerLocker _;
gCPU[cpuID].disabled = !enabled;
gCurrentMode->set_cpu_enabled(cpuID, enabled); gCurrentMode->set_cpu_enabled(cpuID, enabled);
CPUEntry* cpu = &gCPUEntries[cpuID]; CPUEntry* cpu = &gCPUEntries[cpuID];
@@ -654,6 +651,8 @@ scheduler_set_cpu_enabled(int32 cpuID, bool enabled)
core->fCPUCount--; core->fCPUCount--;
} }
gCPU[cpuID].disabled = !enabled;
if (core->fCPUCount == 0) { if (core->fCPUCount == 0) {
// core has been disabled // core has been disabled
ASSERT(!enabled); ASSERT(!enabled);
@@ -53,6 +53,9 @@ CPUEntry::CPUEntry()
void void
CPUEntry::UpdatePriority(int32 priority) CPUEntry::UpdatePriority(int32 priority)
{ {
if (gCPU[fCPUNumber].disabled)
return;
int32 corePriority = CPUPriorityHeap::GetKey(fCore->fCPUHeap.PeekMaximum()); int32 corePriority = CPUPriorityHeap::GetKey(fCore->fCPUHeap.PeekMaximum());
fCore->fCPUHeap.ModifyKey(this, priority); fCore->fCPUHeap.ModifyKey(this, priority);