diff TaskManager/Fifo/FifoTaskManagerImpl.cc @ 721:2b167196cb27

cleanups..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 19 Dec 2009 12:12:09 +0900
parents cafffff0f45a
children 31d0a5baafdf
line wrap: on
line diff
--- a/TaskManager/Fifo/FifoTaskManagerImpl.cc	Sat Dec 19 10:43:19 2009 +0900
+++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc	Sat Dec 19 12:12:09 2009 +0900
@@ -9,6 +9,8 @@
 #include "SchedNop.h"
 #include "SysFunc.h"
 
+// static void send_alloc_reply(FifoTaskManagerImpl *tm, int id, MainScheduler *s);
+
 FifoTaskManagerImpl::~FifoTaskManagerImpl()
 {
     delete mainScheduler;
@@ -71,10 +73,8 @@
 
 }
 
-void FifoTaskManagerImpl::show_profile() {
-    printf("HEHEHEHEH\n");
-}
-void FifoTaskManagerImpl::start_profile() {}
+// void FifoTaskManagerImpl::show_profile() {}
+// void FifoTaskManagerImpl::start_profile() {}
 
 /**
  * スケジューラに渡す TaskList を取得する。
@@ -144,17 +144,15 @@
 {
     TaskListPtr list;
 
-    list = get_runTaskList();
-
-    do {
+    while((list = get_runTaskList())) {
         // list を実行する
-        schedule(list);
-
+        sendTaskList(list);
         // ppe scheduler からの mail を調べる
         mail_check();
-
-        list = get_runTaskList();
-    } while (list);
+    }
+    if (!waitTaskQueue->empty()) {
+        fprintf(stderr,"Dead lock detected\n");
+    }
 }
 
 /**
@@ -164,20 +162,18 @@
  * [Tasklist] -> [番兵] -> scheduler->run を抜ける
  */
 void
-FifoTaskManagerImpl::schedule(TaskListPtr list)
+FifoTaskManagerImpl::sendTaskList(TaskListPtr list)
 {
-    if (list) {
-	// TaskList のアドレスを送る
-	mainScheduler->mail_write_from_host((memaddr)list);
+    // TaskList のアドレスを送る
+    mainScheduler->mail_write_from_host((memaddr)list);
 
-	// EXIT_COMMAND (番兵的な意味で)
-	//   これを読むと、mainScheduler->run() から抜けて来る。
-	mainScheduler->mail_write_from_host((memaddr)MY_SPE_COMMAND_EXIT);
+    // EXIT_COMMAND (番兵的な意味で)
+    //   これを読むと、mainScheduler->run() から抜けて来る。
+    mainScheduler->mail_write_from_host((memaddr)MY_SPE_COMMAND_EXIT);
 
-	// scheduler は受け取ったメールを元に実行する
-	//   new SchedTaskList(list, mainScheduler) の方が良さそうだけど...
-	mainScheduler->run(new SchedNop());
-    }
+    // scheduler は受け取ったメールを元に実行する
+    mainScheduler->run(new SchedNop());
+    // すべてのlistを実行するまで戻らない
 }
 
 /**
@@ -200,6 +196,11 @@
             __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_COMMAND_MALLOC) {
+	    // MY_SPE_COMMAND_MALLOC   PPE からのmain memory request
+	    // 本来は呼ばれないはず...
+	    fprintf(stderr, "error: MY_SPE_COMMAND_MALLOC from PPE\n");
+	    // send_alloc_reply(this, 0, mainScheduler);
         } else if (data != (memaddr)MY_SPE_NOP) {
             __debug_ppe("mail_check(): recv from 0x%x\n", data);
 	    // post_func を先に実行しないと、systask_finish が active_queue
@@ -211,6 +212,30 @@
     }
 }
 
+#if 0
+static void
+send_alloc_reply(FifoTaskManagerImpl *tm, int id, MainScheduler *s)
+{
+    /**
+     * info[0] = alloc_id; (CellScheduler::mainMem_alloc 参照)
+     * info[1] = alloc_addr;
+     */
+    memaddr alloc_info[2];
+    long alloc_size;
+    long command;
+
+    alloc_info[0] = s->mail_read_from_host();
+    alloc_info[1] = s->mail_read_from_host();
+    command = (long)alloc_info[0];
+    alloc_size = (long)alloc_info[1];
+
+    alloc_info[1] = (memaddr)tm->allocate(alloc_size);
+
+    s->mail_write_from_host(alloc_info[0]);
+    s->mail_write_from_host(alloc_info[1]);
+}
+#endif
+
 
 /**
  * # # # # # # # #