Mercurial > hg > Game > Cerium
changeset 1466:cb57420a8219 draft
TaskList on going...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 15 Jul 2012 13:36:55 +0900 |
parents | fc5b23108608 |
children | d585a7614cd5 |
files | TaskManager/kernel/ppe/HTask.cc TaskManager/kernel/ppe/HTask.h TaskManager/kernel/ppe/TaskList.h TaskManager/kernel/ppe/TaskManagerImpl.cc TaskManager/kernel/schedule/SchedTask.cc TaskManager/kernel/schedule/SchedTaskList.cc |
diffstat | 6 files changed, 15 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/HTask.cc Sun Jul 15 09:56:54 2012 +0900 +++ b/TaskManager/kernel/ppe/HTask.cc Sun Jul 15 13:36:55 2012 +0900 @@ -22,6 +22,7 @@ tasklog->create_time = rdtsc(); TaskList *tl = (TaskList*)rbuf; tl->self = this; + tl->set_last(last); mimpl->spawn_task(this); } @@ -126,7 +127,7 @@ } Task *next = t->next(); if (next >= tl->last()) { - tl->lastTask = t; + tl->set_last(t); TaskListPtr nextTaskList = mimpl->createTaskList(); nextTaskList->prev = tl; tl->next = nextTaskList; @@ -136,6 +137,7 @@ rbuf = (memaddr)tl; } next->init(id, param_count, inData_count, outData_count); + last = next->next(); return next; } @@ -148,8 +150,6 @@ void HTask::spawn_task_array(Task * last) { - TaskList *tl = (TaskList*)rbuf; - tl->lastTask = last; }
--- a/TaskManager/kernel/ppe/HTask.h Sun Jul 15 09:56:54 2012 +0900 +++ b/TaskManager/kernel/ppe/HTask.h Sun Jul 15 13:36:55 2012 +0900 @@ -41,6 +41,7 @@ void *post_arg2; CPU_TYPE cpu_type; TaskManagerImpl *mimpl; + TaskPtr last; TaskLog *tasklog;
--- a/TaskManager/kernel/ppe/TaskList.h Sun Jul 15 09:56:54 2012 +0900 +++ b/TaskManager/kernel/ppe/TaskList.h Sun Jul 15 13:36:55 2012 +0900 @@ -12,7 +12,7 @@ public: BASE_NEW_DELETE(TaskList); - Task *lastTask; // 4 byte + long lastTask; // 4 byte TaskList *next; // 4 byte TaskList *prev; // 4 byte TaskList *waiter; // 4 byte @@ -20,8 +20,9 @@ long dummy[3]; // 16 byte Task tasks[TASK_MAX_SIZE]; // 32*TASK_MAX_SIZE - TaskPtr last() { return lastTask; } - void init() { lastTask = &tasks[TASK_MAX_SIZE]; waiter=this; } + TaskPtr last() { return (TaskPtr)(((memaddr)tasks)+lastTask); } + void set_last(Task *t) { lastTask = ((memaddr)t) - ((memaddr)tasks); } + void init() { lastTask = ((memaddr)&tasks[TASK_MAX_SIZE])-(memaddr)(tasks); waiter=this; } void initOnce() { } void freeOnce() {}
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc Sun Jul 15 09:56:54 2012 +0900 +++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc Sun Jul 15 13:36:55 2012 +0900 @@ -295,15 +295,9 @@ wait_i->free_(p); // p->wait_i, p->wait_me は再利用される } - // TaskArray1 の場合、Task,rbuf共にtasklistに入る。 - // tasklistはどこかでfreeされてるはずなので、メモリリークしない。 - // TaskArray の rbuf はfreeされない見たいなので、ここでfreeしてみる。 - - - if (me->command == TaskArray) { - free(me->rbuf); - } - + // このTaskList は終わったので、今 free して良いが、TaskListInfo に入っているので、 + // MY_SPE_STATUS_READY 時に、まとめてfree する。FifoTaskManager/CellTaskManager + // me を誰かが持っていて、me が finish した後に、 // me->wait_for(i) とか、やられると気まずい。 // 特に、me が他人に再利用されていると。そういう時には、
--- a/TaskManager/kernel/schedule/SchedTask.cc Sun Jul 15 09:56:54 2012 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Sun Jul 15 13:36:55 2012 +0900 @@ -13,7 +13,7 @@ extern TaskObject task_list[MAX_TASK_OBJECT]; - +static int dummy[1]; SchedTask::SchedTask() { @@ -44,11 +44,11 @@ manager = sc->manager; connector = sc->connector; - inListData.bound = 0; + inListData.bound = dummy; inListData.size = 0; inListData.length = 0; inListData.element = 0; - outListData.bound = 0; + outListData.bound = dummy; outListData.size = 0; outListData.length = 0; outListData.element = 0;
--- a/TaskManager/kernel/schedule/SchedTaskList.cc Sun Jul 15 09:56:54 2012 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskList.cc Sun Jul 15 13:36:55 2012 +0900 @@ -24,10 +24,10 @@ // should check TaskList size Todo scheduler = sched; list = scheduler->get_curListBuf(); - cur_index = list->tasks; connector = scheduler->connector; list = (TaskListPtr)connector->dma_load1(list, params_addr, sizeof(TaskList), DMA_READ_TASKLIST); + cur_index = list->tasks; this->tag = tag;