Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 801:974cd68383b3
TaslListInfo
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 22 May 2010 18:20:16 +0900 |
parents | 2708c4a7bade |
children | 3763d29f41a3 |
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc Fri May 21 07:47:25 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc Sat May 22 18:20:16 2010 +0900 @@ -6,6 +6,8 @@ #include "Scheduler.h" #include "SysTask.h" #include "SysFunc.h" +#include <string.h> + static HTaskPtr systask_start; static HTaskPtr systask_finish; @@ -176,6 +178,39 @@ waitTaskQueue ->addLast(q); } +void +TaskManagerImpl::set_taskList(HTaskPtr htask, TaskListInfoPtr taskList) { + TaskListPtr list = taskList->getLast(); + SimpleTaskPtr task = &list->tasks[list->length++]; + if (htask->command==TaskArray1) { + // compatibility + int next = ((htask->r_size)/sizeof(SimpleTask))+1; + if (list->length+next>=TASK_MAX_SIZE) { + list->length--; + TaskListPtr newList = taskListImpl->create(); + taskList->addLast(newList); + list = newList; + task = &list->tasks[list->length++]; + } + Task *array = (Task*)&list->tasks[list->length]; + list->length += next; + if (list->length>=TASK_MAX_SIZE) { + perror("task array1 overflow\n"); + } + memcpy(array, htask->rbuf, htask->r_size); + free(htask->rbuf); + htask->rbuf = 0; htask->r_size = 0; + *task = *(SimpleTask*)htask; + } else { + *task = *(SimpleTask*)htask; + } + if (list->length >= TASK_MAX_SIZE) { + TaskListPtr newList = taskListImpl->create(); + taskList->addLast(newList); + list = newList; + } +} + /* end */