Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 3:2356238ebea7
*** empty log message ***
author | gongo |
---|---|
date | Tue, 05 Feb 2008 20:22:50 +0900 |
parents | |
children | 75f184d16fa5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc Tue Feb 05 20:22:50 2008 +0900 @@ -0,0 +1,56 @@ +#include "TaskManagerImpl.h" + +void +noaction(void) +{ +} + +TaskManagerImpl::TaskManagerImpl(int num) +{ + machineNum = num; +} + +HTaskPtr +TaskManagerImpl::create_task(int cmd, int size, + unsigned long long in_addr, + unsigned long long out_addr, + void (*func)(void)) +{ + HTaskPtr new_task; + + new_task = taskInfo->get_free_task(cmd, size, in_addr, out_addr); + + if (func == NULL) { + new_task->post_func = noaction; + } else { + new_task->post_func = func; + } + + return new_task; +} + +/** + * task の依存関係を設定 + * master task が終わってから、slave task を実行するように + */ +void +TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave) +{ + TaskQueuePtr m, s; + + m = taskInfo->get_free_taskQueue(master); + s = taskInfo->get_free_taskQueue(slave); + + master->wait_me = append_taskQueue(master->wait_me, s); + slave->wait_i = append_taskQueue(slave->wait_i, m); +} + +void +TaskManagerImpl::run_task(HTaskPtr task) +{ + if (task->wait_i == NULL) { + taskInfo->append_activeTask(task); + } else { + taskInfo->append_waitTask(task); + } +}