# HG changeset patch # User Shinji KONO # Date 1279206784 -32400 # Node ID 96536163c0a07ff26ac12d518cc37ebc28fc8db8 # Parent baae338d91da65566f59747d97fa4868179536b3 fix SimpleTask alignment diff -r baae338d91da -r 96536163c0a0 TaskManager/ChangeLog --- a/TaskManager/ChangeLog Thu Jul 15 11:59:53 2010 +0900 +++ b/TaskManager/ChangeLog Fri Jul 16 00:13:04 2010 +0900 @@ -1,3 +1,8 @@ +2010-7-16 Shinji KONO + + SimpleTask のsizeを16の倍数に。そうしないと、Taskのaligmentが16に + ならないので、gcc -O9 で破綻する。 + 2010-7-14 Shinji KONO SchedTaskArray::exec の run の値が最適化で、おかしくなるのは、gcc のbugらしい。 diff -r baae338d91da -r 96536163c0a0 TaskManager/kernel/ppe/SimpleTask.h --- a/TaskManager/kernel/ppe/SimpleTask.h Thu Jul 15 11:59:53 2010 +0900 +++ b/TaskManager/kernel/ppe/SimpleTask.h Fri Jul 16 00:13:04 2010 +0900 @@ -17,6 +17,8 @@ memaddr wbuf; int r_size; int w_size; + int dm1; // sizeof(SimpleTask)==32 + int dm2; public: // functions diff -r baae338d91da -r 96536163c0a0 TaskManager/kernel/schedule/SchedTaskArray.cc --- a/TaskManager/kernel/schedule/SchedTaskArray.cc Thu Jul 15 11:59:53 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArray.cc Fri Jul 16 00:13:04 2010 +0900 @@ -19,6 +19,9 @@ outListData.size = 0; outListData.length = 0; outListData.element = 0; + + cur_index = -1; + task = 0; } /** @@ -45,6 +48,8 @@ atask = (TaskPtr)st; array = 0; savedTask->cur_index += (atask->size()+sizeof(SimpleTask))/sizeof(SimpleTask); + cur_index = -1; + task = 0; } @@ -109,11 +114,15 @@ // allocate write buffer outListData.length = atask->outData_count; outListData.size = atask->outData_total_size(); + // atask->outData_offset += cur_index + 1 ; // to avoid compiler bug outListData.element = atask->outData(0); outListData.bound = (int*)manager->allocate(outListData.length*sizeof(int)); bound(&outListData); writebuf = manager->allocate(outListData.size); + //if (outListData.element == inListData.element ) { + // printf("bad %x\n",outListData.element); + //} } scheduler->dma_wait(DMA_READ); task_list[atask->command].run(this, readbuf, writebuf); diff -r baae338d91da -r 96536163c0a0 TaskManager/kernel/schedule/SchedTaskArrayLoad.cc --- a/TaskManager/kernel/schedule/SchedTaskArrayLoad.cc Thu Jul 15 11:59:53 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayLoad.cc Fri Jul 16 00:13:04 2010 +0900 @@ -9,6 +9,7 @@ scheduler = s; savedTask = savedTask_; task = savedTask->task; + cur_index = -2; } SchedTaskArrayLoad::~SchedTaskArrayLoad() {} diff -r baae338d91da -r 96536163c0a0 TaskManager/kernel/schedule/SchedTaskArrayNop.cc --- a/TaskManager/kernel/schedule/SchedTaskArrayNop.cc Thu Jul 15 11:59:53 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayNop.cc Fri Jul 16 00:13:04 2010 +0900 @@ -16,6 +16,7 @@ outListData.size = 0; outListData.length = 0; outListData.element = 0; + cur_index = -3; } @@ -65,9 +66,7 @@ // 最後のTask が exec されて、次の Task を実行してかまわない。 - SchedTaskBase *n = savedTask->next(scheduler, savedTask); - - return n; + return savedTask->next(scheduler, savedTask); } diff -r baae338d91da -r 96536163c0a0 TaskManager/kernel/schedule/Scheduler.cc --- a/TaskManager/kernel/schedule/Scheduler.cc Thu Jul 15 11:59:53 2010 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.cc Fri Jul 16 00:13:04 2010 +0900 @@ -71,10 +71,8 @@ // Pipeline Stage SchedTaskBase* task2 = new SchedNop(); SchedTaskBase* task3 = new SchedNop(); - // main loop do { - __debug("----------\n"); task3->write(); task2->exec(); task1->read(); @@ -82,7 +80,7 @@ task3 = task2; task2 = task1; - task1 = task1->next(this, 0); + task1 = task1->next(this, 0); } while (task1); delete task3;