diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2011-03-31 16:16:49 -0500 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2011-03-31 16:16:49 -0500 |
commit | ec8abe32d3eccc9ef46341a045097b5d4abde886 (patch) | |
tree | 37db598962eb8a0bbbcd3d6722dbb35e89461de6 /src | |
parent | 17166038aa59e351f7815255e680ce4637c500f0 (diff) | |
download | talos-hostboot-ec8abe32d3eccc9ef46341a045097b5d4abde886.tar.gz talos-hostboot-ec8abe32d3eccc9ef46341a045097b5d4abde886.zip |
Eliminate race condition in updating task->cpu pointer.
Diffstat (limited to 'src')
-rw-r--r-- | src/kernel/cpumgr.C | 3 | ||||
-rw-r--r-- | src/kernel/taskmgr.C | 3 |
2 files changed, 3 insertions, 3 deletions
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 <kernel/taskmgr.H> #include <kernel/task.H> #include <kernel/pagemgr.H> +#include <kernel/cpumgr.H> #include <arch/ppc.H> 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; } |