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;