diff TaskManager/kernel/schedule/SchedTask.cc @ 506:1d4a8a86f26b

code_load in read()
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 02:50:01 +0900
parents 36b323130b1b
children 125a72948e44
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/SchedTask.cc	Sun Oct 11 20:07:47 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.cc	Mon Oct 12 02:50:01 2009 +0900
@@ -153,6 +153,34 @@
 void
 SchedTask::read()
 {
+    __debug("[SchedTask:%s]\n", __FUNCTION__);
+
+#if 0
+#if !defined(NO_PIPELINE)
+    scheduler->dma_wait(DMA_READ_IN_LIST);
+    scheduler->dma_wait(DMA_READ_OUT_LIST);
+#endif
+#endif
+    // object creation をSchedTask生成時にやらないので、
+    // exec の直前のread で十分に間に合う
+    if (cur_index < list->length) {
+	// load next task
+	loadSchedTask(scheduler, &list->tasks[cur_index]);
+    }
+
+    writebuf = scheduler->allocate(outListData->size);
+
+    // 読むデータが一つもなければ無視
+    if (inListData->length == 0) return;
+
+    // load Input Data
+    readbuf = scheduler->allocate(inListData->size);
+    scheduler->dma_loadList(inListData, readbuf, DMA_READ);
+
+#if defined(NO_PIPELINE)
+    scheduler->dma_wait(DMA_READ);
+#endif
+
     (this->*ex_read)();
 }
 
@@ -170,28 +198,6 @@
 void
 SchedTask::ex_read_normal()
 {
-    __debug("[SchedTask:%s]\n", __FUNCTION__);
-
-#if 0
-#if !defined(NO_PIPELINE)
-    scheduler->dma_wait(DMA_READ_IN_LIST);
-    scheduler->dma_wait(DMA_READ_OUT_LIST);
-#endif
-#endif
-
-    writebuf = scheduler->allocate(outListData->size);
-
-    // 読むデータが一つもなければ無視
-    if (inListData->length == 0) return;
-
-    // load Input Data
-    readbuf = scheduler->allocate(inListData->size);
-    scheduler->dma_loadList(inListData, readbuf, DMA_READ);
-
-#if defined(NO_PIPELINE)
-    scheduler->dma_wait(DMA_READ);
-#endif
-
 }
 
 void
@@ -342,10 +348,6 @@
             return nextSched;
         } else {
             TaskPtr nextTask = &list->tasks[cur_index++];
-	    if (cur_index < list->length) {
-		// load next task
-		loadSchedTask(scheduler, &list->tasks[cur_index]);
-	    }
             nextSched = createSchedTask(scheduler, nextTask);
             ((SchedTask*)nextSched)->init(list, nextTask, cur_index,
                                               // scheduler->get_curReadBuf(),
@@ -376,10 +378,6 @@
 
     if (cur_index < list->length) {
         nextTask = &list->tasks[cur_index++];
-	if (cur_index < list->length) {
-	    // load next task
-	    loadSchedTask(scheduler, &list->tasks[cur_index]);
-	}
         nextSched = createSchedTask(scheduler, nextTask);
 
         // RenewTaskList を実行中なので
@@ -409,10 +407,6 @@
                 cur_index = scheduler->get_backupTaskListIndex();
 
                 nextTask = &nextList->tasks[cur_index++];
-		if (cur_index < list->length) {
-		    // load next task
-		    loadSchedTask(scheduler, &list->tasks[cur_index]);
-		}
                 nextSched = createSchedTask(scheduler, nextTask);
 
                 nextSched->init(nextList, nextTask, cur_index,