diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2010-06-07 12:57:24 -0500 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2010-06-07 12:57:24 -0500 |
commit | cd86583d084a4227dbf6a7cca2934eaad2b060d1 (patch) | |
tree | 0e45df2bd93e4f684bb7e4c4b619db579623d8a9 /src | |
parent | 6db79851d2f8664216d85ba73246699d8aae94a7 (diff) | |
download | talos-hostboot-cd86583d084a4227dbf6a7cca2934eaad2b060d1.tar.gz talos-hostboot-cd86583d084a4227dbf6a7cca2934eaad2b060d1.zip |
Give tasks a void-ptr parameter like pthreads.
Diffstat (limited to 'src')
-rw-r--r-- | src/include/kernel/taskmgr.H | 4 | ||||
-rw-r--r-- | src/kernel/taskmgr.C | 12 |
2 files changed, 10 insertions, 6 deletions
diff --git a/src/include/kernel/taskmgr.H b/src/include/kernel/taskmgr.H index 939757fde..fbaf94f8a 100644 --- a/src/include/kernel/taskmgr.H +++ b/src/include/kernel/taskmgr.H @@ -17,7 +17,7 @@ class TaskManager ~TaskManager() {}; static task_t* createIdleTask(); - static task_t* createTask(task_fn_t); + static task_t* createTask(task_fn_t, void*); private: tid_t getNextTid(); @@ -26,7 +26,7 @@ class TaskManager static void idleTaskLoop(); task_t* _createIdleTask(); - task_t* _createTask(task_fn_t, bool); + task_t* _createTask(task_fn_t, void*, bool); }; #endif diff --git a/src/kernel/taskmgr.C b/src/kernel/taskmgr.C index 50b9a0848..5917abfeb 100644 --- a/src/kernel/taskmgr.C +++ b/src/kernel/taskmgr.C @@ -33,9 +33,9 @@ task_t* TaskManager::createIdleTask() return Singleton<TaskManager>::instance()._createIdleTask(); } -task_t* TaskManager::createTask(TaskManager::task_fn_t t) +task_t* TaskManager::createTask(TaskManager::task_fn_t t, void* p) { - return Singleton<TaskManager>::instance()._createTask(t, true); + return Singleton<TaskManager>::instance()._createTask(t, p, true); } tid_t TaskManager::getNextTid() @@ -45,10 +45,11 @@ tid_t TaskManager::getNextTid() task_t* TaskManager::_createIdleTask() { - return this->_createTask(&TaskManager::idleTaskLoop, false); + return this->_createTask(&TaskManager::idleTaskLoop, NULL, false); } -task_t* TaskManager::_createTask(TaskManager::task_fn_t t, bool withStack) +task_t* TaskManager::_createTask(TaskManager::task_fn_t t, + void* p, bool withStack) { task_t* task = new task_t; task->tid = this->getNextTid(); @@ -58,6 +59,9 @@ task_t* TaskManager::_createTask(TaskManager::task_fn_t t, bool withStack) // TOC[1] = TOC base -> r2 task->context.nip = (void*) ((uint64_t*) t)[0]; task->context.gprs[2] = ((uint64_t*)t)[1]; + + // Set up argument. + task->context.gprs[3] = (uint64_t) p; // Setup stack. if (withStack) |