From ec8abe32d3eccc9ef46341a045097b5d4abde886 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Thu, 31 Mar 2011 16:16:49 -0500 Subject: Eliminate race condition in updating task->cpu pointer. --- src/kernel/cpumgr.C | 3 +-- src/kernel/taskmgr.C | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C index 0f225fc13..984396020 100644 --- a/src/kernel/cpumgr.C +++ b/src/kernel/cpumgr.C @@ -19,8 +19,7 @@ CpuManager::CpuManager() cpu_t* CpuManager::getCurrentCPU() { - register task_t* current_task = (task_t*) getSPRG3(); - return current_task->cpu; + return cv_cpus[getPIR()]; } void CpuManager::init() diff --git a/src/kernel/taskmgr.C b/src/kernel/taskmgr.C index f5aa62ceb..0ddc3918a 100644 --- a/src/kernel/taskmgr.C +++ b/src/kernel/taskmgr.C @@ -2,6 +2,7 @@ #include #include #include +#include #include void TaskManager::idleTaskLoop(void* unused) @@ -20,7 +21,7 @@ task_t* TaskManager::getCurrentTask() void TaskManager::setCurrentTask(task_t* t) { - t->cpu = getCurrentTask()->cpu; + t->cpu = CpuManager::getCurrentCPU(); setSPRG3((uint64_t)t); return; } -- cgit v1.2.1