diff TaskManager/Cell/CellTaskManagerImpl.cc @ 629:8843edf37c0e

Cell 64 bit tried, but not yet worked. Cell's list DMA is 32bit.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 18 Nov 2009 13:32:58 +0900
parents 5b178db5988a
children 8cc609285bbe
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc	Tue Nov 17 01:35:12 2009 +0900
+++ b/TaskManager/Cell/CellTaskManagerImpl.cc	Wed Nov 18 13:32:58 2009 +0900
@@ -123,18 +123,9 @@
 	}
 
 	task = &list->tasks[list->length++];
-#if 0
-	task->command  = htask->command;
-	task->inData   = htask->inData;
-	task->outData  = htask->outData;
-	task->self     = (unsigned int)htask;
-#else
-	memcpy(task, (Task*)htask, sizeof(Task));
-#endif
-
-	// activeTaskQueue->free_(queue);
+	TaskPtr stask = (TaskPtr) task;
+	*stask = *(TaskPtr) htask;
     }
-
 }
 
 void
@@ -178,12 +169,11 @@
     ppeManager->mail_check(mail_list, waitTaskQueue);
 
     do {
-	unsigned int data;
+	memaddr data;
 
 	// SPE Scheduler からの mail check
 	for (int id = 0; id < machineNum; id++) {	    
 	    while (speThreads->check_mail(id, 1, &data)) {				
-		
 		/**
 		 * MY_SPE_STATUS_READY: SPE が持ってた Task 全て終了
 		 * MY_SPE_NOP: 特に意味のないコマンド
@@ -194,36 +184,39 @@
 		 * 一目でよくわからない書き方なんで、直したいところですが。。。
 		 */
 		// 名前あとでちゃんと決めよう => MY_SPE_... とかじゃなくて
-		if (data == MY_SPE_STATUS_READY) {
+		if (data == (memaddr)MY_SPE_STATUS_READY) {
 		    //__debug_ppe("[SPE %d] finish\n", id);
 		    flag_sendTaskList[id] = 1;
-		} else if (data == MY_SPE_COMMAND_MALLOC) {
+		} else if (data == (memaddr)MY_SPE_COMMAND_MALLOC) {
 		    //__debug_ppe("[PPE] MALLOC COMMAND from [SPE %d]\n", id);
 
 		    /**
 		     * info[0] = alloc_id; (CellScheduler::mainMem_alloc 参照)
 		     * info[1] = alloc_addr;
 		     */
-		    unsigned int alloc_info[3];
-		    int alloc_size;
-		    int command;
+		    memaddr alloc_info[2];
+		    long alloc_size;
+		    long command;
 		    
 		    speThreads->get_mail(id, 2, alloc_info);
-		    command = alloc_info[0];
-		    alloc_size = alloc_info[1];
+		    command = (long)alloc_info[0];
+		    alloc_size = (long)alloc_info[1];
 
 		    
-		    alloc_info[1] = (unsigned int)allocate(alloc_size);
+		    alloc_info[1] = (memaddr)allocate(alloc_size);
 		    /*
 		     * allocate された領域は今の SPE buffer にリンクとして接続する
 		     * ここでは TaskList を allocate(new) して登録してやろうか
 		     */
 
-		    //__debug_ppe("[PPE] MALLOCED 0x%x from [SPE %d]\n", alloc_info[1],id);
+		    //__debug_ppe("[PPE] MALLOCED 0x%lx from [SPE %d]\n", alloc_info[1],id);
+		    // 今のところ何もしてない。どうも、この allocate を free 
+		    // するのは、SPE task が返した値を見て行うらしい。それは、
+		    // 忘れやすいのではないか?
 		    speThreads->add_output_tasklist(command, alloc_info[1], alloc_size);
 
 		    speThreads->send_mail(id, 2, alloc_info);
-		} else if (data > MY_SPE_NOP) {
+		} else if (data > (memaddr)MY_SPE_NOP) {
 		    //__debug_ppe("[PPE] recv from [SPE %d] : 0x%x\n", id, data);
 		    HTaskPtr task = (HTaskPtr)data;
 		    task->post_func(schedTaskManager, task->post_arg1, task->post_arg2);
@@ -275,8 +268,7 @@
 
     taskListImpl->clear_taskList(speTaskList_bg[id]);
 
-    //speThreads->send_mail(id, 1, (unsigned int *)&speTaskList[id]);
-    speThreads->send_mail(id, 1, (unsigned int *)&speTaskList[id]);
+    speThreads->send_mail(id, 1, (memaddr *)&speTaskList[id]);
     flag_sendTaskList[id] = 0;
 }