# HG changeset patch # User Shinji KONO # Date 1258726354 -32400 # Node ID a909c50081c202fe7091d1fe76fb22531434d10d # Parent 70c5c2d2eb24decdd111d9eb1f760053aa70958e SimpeTask on Cell worked. diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/Cell/CellHTaskInfo.cc --- a/TaskManager/Cell/CellHTaskInfo.cc Thu Nov 19 18:45:24 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -#include -#include -#include "CellHTaskInfo.h" - diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/Cell/CellHTaskInfo.h --- a/TaskManager/Cell/CellHTaskInfo.h Thu Nov 19 18:45:24 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -#ifndef INCLUDED_CELL_HTASK_INFO -#define INCLUDED_CELL_HTASK_INFO - -#include "HTaskInfo.h" - -class CellHTaskInfo : public HTaskInfo { -public: - /* functions */ -}; - -#endif diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/Cell/CellTaskManagerImpl.cc --- a/TaskManager/Cell/CellTaskManagerImpl.cc Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Fri Nov 20 23:12:34 2009 +0900 @@ -172,7 +172,9 @@ * * @return PPE Scheduler に対してのメール。 * 次に実行する TaskList のアドレスや、終了コマンドを送る - */TaskListPtr + */ + +TaskListPtr CellTaskManagerImpl::mail_check(MailQueuePtr mail_list) { // PPE Scheduler からの mail check @@ -284,36 +286,6 @@ flag_sendTaskList[id] = 0; } -#if 0 -void* -CellTaskManagerImpl::allocate(int size, int alignment) -{ - if (size==0) return 0; - void *buff; - posix_memalign(&buff, alignment, size); - return buff; -} - -void* -CellTaskManagerImpl::allocate(int size) -{ - if (size==0) return 0; - void *buff; - - posix_memalign(&buff, DEFAULT_ALIGNMENT, size); - - // bzero はコストが高いのでやりたくない - // bzero(buff, size); - - return buff; -} - -Scheduler* -CellTaskManagerImpl::get_scheduler() -{ - return ppeManager->get_scheduler(); -} -#endif #ifdef __CERIUM_CELL__ TaskManagerImpl* diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/ChangeLog --- a/TaskManager/ChangeLog Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/ChangeLog Fri Nov 20 23:12:34 2009 +0900 @@ -1,3 +1,15 @@ +2009-11-20 Shinji KONO + +mail_sendQueue の実装がだめ。こういう実装をすると、queue の +正しさを関数の中に閉じ込められない。なんか、無限リストにな +っているらしい。参照が、渡り歩いているどこかの場所でダメに +なっているらしい。 + +実際、mail_sendQueue は、free list に置き換わってしまう。 +これまで、これがおかしならなかった理由は不明。 + +connector に外から手を入れないで、ちゃんとfunction callするべし。 + 2009-11-19 Shinji KONO finish_task を全員が待つ設定で、finish_task を終了判定に diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/Fifo/FifoDmaManager.cc --- a/TaskManager/Fifo/FifoDmaManager.cc Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/Fifo/FifoDmaManager.cc Fri Nov 20 23:12:34 2009 +0900 @@ -31,6 +31,12 @@ mail_sendQueue = MailManager::append_mailQueue(mail_sendQueue, mailManager->create(data)); +#if 0 + if (MailManager::length(mail_sendQueue)== -1) { + fprintf(stderr,"Mail Queue Error\n"); + exit(1); + } +#endif } memaddr diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/Fifo/FifoTaskManagerImpl.cc --- a/TaskManager/Fifo/FifoTaskManagerImpl.cc Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc Fri Nov 20 23:12:34 2009 +0900 @@ -10,7 +10,7 @@ FifoTaskManagerImpl::~FifoTaskManagerImpl() { delete mailManager; - delete scheduler; + delete mainScheduler; delete taskListImpl ; delete taskQueueImpl ; @@ -29,11 +29,11 @@ mailManager = new MailManager(); mailManager->init(20); - scheduler = new MainScheduler(); - scheduler->init(this); - scheduler->set_mailManager(mailManager); - scheduler->id = 0; - set_scheduler(scheduler); + mainScheduler = new MainScheduler(); + mainScheduler->init(this); + mainScheduler->set_mailManager(mailManager); + mainScheduler->id = 0; + set_scheduler(mainScheduler); taskListImpl = new TaskListInfo; taskQueueImpl = new TaskQueueInfo; @@ -42,7 +42,7 @@ mainTaskList = taskListImpl->create(); schedTaskManager = new SchedTask(); - schedTaskManager->init(0,0,0,scheduler); + schedTaskManager->init(0,0,0,mainScheduler); } @@ -59,10 +59,10 @@ mailManager->init(20); //scheduler = new MainScheduler(); - scheduler = _sched; - scheduler->init(this); - scheduler->set_mailManager(mailManager); - set_scheduler(scheduler); + mainScheduler = _sched; + mainScheduler->init(this); + mainScheduler->set_mailManager(mailManager); + set_scheduler(mainScheduler); taskListImpl = tm-> taskListImpl ; taskQueueImpl = tm-> taskQueueImpl ; @@ -171,10 +171,16 @@ in_mail_list = MailManager::append_mailQueue(in_mail_list, sentinel); // scheduler は受け取ったメールを元に実行する - scheduler->send_mailList(in_mail_list); - scheduler->run(); + mainScheduler->send_mailList(in_mail_list); + mainScheduler->run(); } - out_mail_list = scheduler->recv_mailList(); + out_mail_list = mainScheduler->recv_mailList(); +#if 0 + if (MailManager::length(out_mail_list )==-1) { + fprintf(stderr, "Error on mail list\n"); + exit(0); + } +#endif return out_mail_list; } @@ -208,6 +214,8 @@ if (data == (memaddr)MY_SPE_STATUS_READY) { __debug_ppe("mail_check(): Task List finish\n"); + } else if (data == (memaddr)MY_SPE_COMMAND_EXIT) { + __debug_ppe("mail_check(): Task List finish COMMAND\n"); } else if (data != (memaddr)MY_SPE_NOP) { __debug_ppe("mail_check(): recv from 0x%x\n", data); // post_func を先に実行しないと、systask_finish が active_queue @@ -224,38 +232,6 @@ } } -#if 0 -void* -FifoTaskManagerImpl::allocate(int size, int alignment) -{ - if (size==0) return 0; -#if defined(__APPLE__) && ! defined(HAS_POSIZ_MEMALIGN) - return malloc(size); -#else - void *buff; - posix_memalign(&buff, alignment, size); - return buff; -#endif -} - -void* -FifoTaskManagerImpl::allocate(int size) -{ - if (size==0) return 0; -#if defined(__APPLE__) && ! defined(HAS_POSIZ_MEMALIGN) - return malloc(size); -#else - void *buff; - posix_memalign(&buff, DEFAULT_ALIGNMENT, size); - return buff; -#endif -} - -Scheduler* -FifoTaskManagerImpl::get_scheduler() { - return scheduler; -} -#endif /** * # # # # # # # # diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/Fifo/FifoTaskManagerImpl.h --- a/TaskManager/Fifo/FifoTaskManagerImpl.h Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/Fifo/FifoTaskManagerImpl.h Fri Nov 20 23:12:34 2009 +0900 @@ -16,7 +16,7 @@ TaskListPtr mainTaskList; // activeTask であるべきなんじゃないの? MailManager *mailManager; - MainScheduler *scheduler; + MainScheduler *mainScheduler; /* functions */ // call by system diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/Fifo/MainScheduler.cc --- a/TaskManager/Fifo/MainScheduler.cc Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/Fifo/MainScheduler.cc Fri Nov 20 23:12:34 2009 +0900 @@ -34,7 +34,9 @@ MailQueuePtr MainScheduler::recv_mailList(void) { - return ((FifoDmaManager*)connector)->mail_sendQueue; + MailQueuePtr m = ((FifoDmaManager*)connector)->mail_sendQueue; + ((FifoDmaManager*)connector)->mail_sendQueue = 0; + return m; } @@ -49,13 +51,4 @@ mainMemList[id] = (memaddr)allocate(size); } -#if 0 -/** - * MainScheduler.h に書いてます - */ -void -MainScheduler::mainMem_wait(void) -{ - // 何もしねえ -} -#endif +/* end */ diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/kernel/ppe/MailManager.cc --- a/TaskManager/kernel/ppe/MailManager.cc Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/kernel/ppe/MailManager.cc Fri Nov 20 23:12:34 2009 +0900 @@ -98,3 +98,24 @@ return list; } } + +int +MailManager::length(MailQueuePtr list) +{ + MailQueuePtr p = list; + MailQueuePtr q = p; + int i = 0; + + while(p) { + i++; + p=p->next; + if (i%2==0) { + q = q->next; + } + if (p==q) + return -1; // means loop + } + return i; +} + +/* end */ diff -r 70c5c2d2eb24 -r a909c50081c2 TaskManager/kernel/ppe/MailManager.h --- a/TaskManager/kernel/ppe/MailManager.h Thu Nov 19 18:45:24 2009 +0900 +++ b/TaskManager/kernel/ppe/MailManager.h Fri Nov 20 23:12:34 2009 +0900 @@ -19,6 +19,7 @@ MailQueuePtr create(memaddr data); void free(MailQueuePtr q); static MailQueuePtr append_mailQueue(MailQueuePtr list, MailQueuePtr q); + static int length(MailQueuePtr list); private: /* variables */ diff -r 70c5c2d2eb24 -r a909c50081c2 example/Simple/ppe/Twice.cc --- a/example/Simple/ppe/Twice.cc Thu Nov 19 18:45:24 2009 +0900 +++ b/example/Simple/ppe/Twice.cc Fri Nov 20 23:12:34 2009 +0900 @@ -20,6 +20,7 @@ for (int i = 0; i < length; i++) { o_data[i] = i_data[i] * 2; } + s->printf("PPE %d end\n",s->get_cpuid()); return 0; } diff -r 70c5c2d2eb24 -r a909c50081c2 example/Simple/spe/Twice.cc --- a/example/Simple/spe/Twice.cc Thu Nov 19 18:45:24 2009 +0900 +++ b/example/Simple/spe/Twice.cc Fri Nov 20 23:12:34 2009 +0900 @@ -20,6 +20,7 @@ for (int i = 0; i < length; i++) { o_data[i] = i_data[i] * 2; } + s->printf("SPE %d end\n",s->get_cpuid()); return 0; }