summaryrefslogtreecommitdiffstats
path: root/src/kernel/timemgr.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-05-16 12:51:22 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-07-16 19:05:48 -0500
commit3bba9a3ff18b6991bba4247898f4c26fa944a676 (patch)
treeda3462c53eaf0670670b37f094c17444f1ce5c4c /src/kernel/timemgr.C
parent2aa5e0afac73384aaabe1fe1529898601be1155f (diff)
downloadtalos-hostboot-3bba9a3ff18b6991bba4247898f4c26fa944a676.tar.gz
talos-hostboot-3bba9a3ff18b6991bba4247898f4c26fa944a676.zip
Support for core_activate via IPI.
RTC: 37009 Change-Id: I56669805c86d9659a20ad7c26e5e9860c7a248c7 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1087 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel/timemgr.C')
-rw-r--r--src/kernel/timemgr.C26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/kernel/timemgr.C b/src/kernel/timemgr.C
index b6be8cb90..36d89ee30 100644
--- a/src/kernel/timemgr.C
+++ b/src/kernel/timemgr.C
@@ -24,6 +24,7 @@
#include <kernel/scheduler.H>
#include <util/singleton.H>
#include <kernel/task.H>
+#include <kernel/cpumgr.H>
uint64_t TimeManager::iv_timebaseFreq = 0xFFFFFFFF;
@@ -37,6 +38,16 @@ void TimeManager::_init()
iv_timebaseFreq = 512000000ULL;
}
+void TimeManager::init_cpu(cpu_t* cpu)
+{
+ Singleton<TimeManager>::instance()._init_cpu(cpu);
+}
+
+void TimeManager::_init_cpu(cpu_t* cpu)
+{
+ cpu->delay_list = new delaylist_t;
+}
+
uint64_t TimeManager::convertSecToTicks(uint64_t i_sec, uint64_t i_nsec)
{
// This code will handle times almost up to a year without overflowing a
@@ -68,13 +79,13 @@ void TimeManager::_delayTask(task_t* t, uint64_t i_sec, uint64_t i_nsec)
_TimeManager_Delay_t* node = new _TimeManager_Delay_t();
node->key = this->getCurrentTimeBase() +
- this->convertSecToTicks(i_sec, i_nsec);
+ this->convertSecToTicks(i_sec, i_nsec);
node->task = t;
t->state = TASK_STATE_BLOCK_SLEEP;
t->state_info = (void*)node->key;
- iv_taskList[getPIR()].insert(node);
+ _get_delaylist()->insert(node);
}
void TimeManager::checkReleaseTasks(Scheduler* s)
@@ -87,9 +98,14 @@ void TimeManager::_checkReleaseTasks(Scheduler* s)
uint64_t l_currentTime = getCurrentTimeBase();
_TimeManager_Delay_t* node = NULL;
- while(NULL != (node = iv_taskList[getPIR()].remove_if(l_currentTime)))
+ while(NULL != (node = _get_delaylist()->remove_if(l_currentTime)))
{
- s->addTask(node->task);
- delete node;
+ s->addTask(node->task);
+ delete node;
}
}
+
+inline TimeManager::delaylist_t* TimeManager::_get_delaylist()
+{
+ return static_cast<delaylist_t*>(CpuManager::getCurrentCPU()->delay_list);
+}
OpenPOWER on IntegriCloud