annotate TaskManager/kernel/ppe/TaskManagerImpl.cc @ 5:75f184d16fa5

*** empty log message ***
author gongo
date Tue, 05 Feb 2008 23:32:43 +0900
parents 2356238ebea7
children 0c9341da4522
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
1 #include <stdio.h>
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
2 #include "TaskManagerImpl.h"
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
4 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
5 noaction(void)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
6 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
7 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
8
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
9 TaskManagerImpl::TaskManagerImpl(int num)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
10 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
11 machineNum = num;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
12 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
13
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
14 HTaskPtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
15 TaskManagerImpl::create_task(int cmd, int size,
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
16 unsigned long long in_addr,
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
17 unsigned long long out_addr,
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
18 void (*func)(void))
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
19 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
20 HTaskPtr new_task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
21
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
22 new_task = taskInfo->get_free_task(cmd, size, in_addr, out_addr);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
23
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
24 if (func == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
25 new_task->post_func = noaction;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
26 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
27 new_task->post_func = func;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
28 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
29
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
30 return new_task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
31 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
32
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
33 /**
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
34 * task の依存関係を設定
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
35 * master task が終わってから、slave task を実行するように
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
36 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
37 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
38 TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
39 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
40 TaskQueuePtr m, s;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
41
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
42 m = taskInfo->get_free_taskQueue(master);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
43 s = taskInfo->get_free_taskQueue(slave);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
44
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
45 master->wait_me = append_taskQueue(master->wait_me, s);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
46 slave->wait_i = append_taskQueue(slave->wait_i, m);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
47 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
48
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
49 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
50 TaskManagerImpl::run_task(HTaskPtr task)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
51 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
52 if (task->wait_i == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
53 taskInfo->append_activeTask(task);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
54 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
55 taskInfo->append_waitTask(task);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
56 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
57 }