summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-03-31 16:16:49 -0500
committerPatrick Williams <iawillia@us.ibm.com>2011-03-31 16:16:49 -0500
commitec8abe32d3eccc9ef46341a045097b5d4abde886 (patch)
tree37db598962eb8a0bbbcd3d6722dbb35e89461de6 /src/kernel
parent17166038aa59e351f7815255e680ce4637c500f0 (diff)
downloadtalos-hostboot-ec8abe32d3eccc9ef46341a045097b5d4abde886.tar.gz
talos-hostboot-ec8abe32d3eccc9ef46341a045097b5d4abde886.zip
Eliminate race condition in updating task->cpu pointer.
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/cpumgr.C3
-rw-r--r--src/kernel/taskmgr.C3
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;
}
OpenPOWER on IntegriCloud