Mercurial > hg > Game > Cerium
changeset 888:b6c45005a3bc draft
call savedTask->write() in TaskArray finish.
TASK_LIST_MAIL is working now.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 14 Jul 2010 23:54:36 +0900 |
parents | 4860272b2f47 |
children | 5f5301028e29 |
files | TaskManager/ChangeLog TaskManager/Makefile.def TaskManager/kernel/schedule/SchedTask.cc TaskManager/kernel/schedule/SchedTaskArrayNop.cc TaskManager/kernel/schedule/SchedTaskBase.h |
diffstat | 5 files changed, 25 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/TaskManager/ChangeLog Wed Jul 14 20:40:33 2010 +0900 +++ b/TaskManager/ChangeLog Wed Jul 14 23:54:36 2010 +0900 @@ -1,3 +1,9 @@ +2010-7-14 Shinji KONO <kono@ie.u-ryukyu.ac.jp> + + SchedTaskArray::exec の run の値が最適化で、おかしくなるのは、gcc のbugらしい。 + SimpleTask の finish mail が返るのが早すぎる。write を呼ぶのが正しい。 + cur_index++ してしまうと、task1/task2 のcur_indexが同じになってしまう。 + 2010-5-25 Shinji KONO <kono@ie.u-ryukyu.ac.jp> PPE側のpost_funcやtaskを実行している時にもSPEからのメールは読んでしまう
--- a/TaskManager/Makefile.def Wed Jul 14 20:40:33 2010 +0900 +++ b/TaskManager/Makefile.def Wed Jul 14 23:54:36 2010 +0900 @@ -30,7 +30,7 @@ ABIBIT = 32 #OPT = -O9 -OPT = -O9 -g -DTASK_LIST_MAIL +OPT = -g -O9 -DTASK_LIST_MAIL CC = g++ CFLAGS = -Wall `sdl-config --cflags` -m$(ABIBIT) $(OPT)
--- a/TaskManager/kernel/schedule/SchedTask.cc Wed Jul 14 20:40:33 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Wed Jul 14 23:54:36 2010 +0900 @@ -53,6 +53,14 @@ // scheduler->mainMem_wait(); // これはなんで? manager = sc->manager; +#ifdef TASK_LIST_MAIL + if (list) + waiter = (memaddr) list->waiter; +#else + if (task) + waiter = (memaddr) task->self; +#endif + } @@ -102,8 +110,11 @@ scheduler->dma_wait(DMA_WRITE); free(writebuf); -#ifndef TASK_LIST_MAIL - scheduler->mail_write((memaddr)task->self); +#ifdef TASK_LIST_MAIL + if (!(cur_index < list->length) ) + scheduler->mail_write(waiter); +#else + scheduler->mail_write(waiter); #endif } @@ -115,9 +126,9 @@ if (cur_index < list->length) { // Task List が残っているので、次を準備 - TaskPtr nextTask = &list->tasks[cur_index++]; + TaskPtr nextTask = &list->tasks[cur_index]; SchedTask *nextSched = new SchedTask(); - nextSched->init(list, nextTask, cur_index, scheduler); + nextSched->init(list, nextTask, cur_index+1, scheduler); // この時点で、TaskList は down load が済んでないことがある // 最初のTaskの種類に関しては、別な情報で渡す方が良い // あるいはTaskListの最初には、TaskArray1/TaskArray を置かない? @@ -132,9 +143,6 @@ } return nextSched; } else { -#ifdef TASK_LIST_MAIL - scheduler->mail_write((memaddr)list->waiter); -#endif memaddr nextList = (memaddr)list->next; if (nextList == 0) { // もう何もする必要がない
--- a/TaskManager/kernel/schedule/SchedTaskArrayNop.cc Wed Jul 14 20:40:33 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayNop.cc Wed Jul 14 23:54:36 2010 +0900 @@ -5,7 +5,6 @@ SchedTaskArrayNop::SchedTaskArrayNop(Scheduler *s, SchedTaskBase *savedTask_, Task *curTask_, Task *_array) { savedTask = savedTask_; - params_addr = (memaddr)savedTask->task->self; atask = _array; scheduler = s; @@ -54,10 +53,9 @@ void SchedTaskArrayNop::write() { -#ifndef TASK_LIST_MAIL - scheduler->mail_write((memaddr)params_addr); -#endif + savedTask ->write(); free(atask); + delete savedTask; } @@ -69,7 +67,6 @@ SchedTaskBase *n = savedTask->next(scheduler, savedTask); - delete savedTask; return n; }