comparison TaskManager/kernel/schedule/SchedTaskList.cc @ 625:60aa3f241b10

64bit mode worked on Mac OS X.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 16 Nov 2009 10:59:55 +0900
parents 0decff4e867b
children 9a6cb2439593
comparison
equal deleted inserted replaced
624:c7b5c99252ad 625:60aa3f241b10
17 */ 17 */
18 SchedTaskList* 18 SchedTaskList*
19 createSchedTaskList(memaddr next_list, Scheduler* scheduler, int renew_flag) 19 createSchedTaskList(memaddr next_list, Scheduler* scheduler, int renew_flag)
20 { 20 {
21 SchedTaskList* sched = new SchedTaskList(next_list, scheduler); 21 SchedTaskList* sched = new SchedTaskList(next_list, scheduler);
22 sched->flag_renewTaskList = renew_flag;
23 return sched; 22 return sched;
24 } 23 }
25 24
26 SchedTaskList::SchedTaskList(unsigned int addr, Scheduler *sched) 25 SchedTaskList::SchedTaskList(memaddr addr, Scheduler *sched)
27 { 26 {
28 params_addr = addr; 27 params_addr = addr;
29 list = NULL; 28 list = NULL;
30 scheduler = sched; 29 scheduler = sched;
31 30
32 flag_renewTaskList = 0;
33 } 31 }
34 32
35 33
36 void 34 void
37 SchedTaskList::read() 35 SchedTaskList::read()
38 { 36 {
39 __debug("[SchedTaskList:%s]\n", __FUNCTION__); 37 __debug("[SchedTaskList:%s]\n", __FUNCTION__);
40 38
41 if (flag_renewTaskList == SCHED_TASKLIST_NORMAL) {
42 list = scheduler->get_curListBuf(); 39 list = scheduler->get_curListBuf();
43 scheduler->dma_load(list, params_addr, 40 scheduler->dma_load(list, params_addr,
44 sizeof(TaskList), DMA_READ_TASKLIST); 41 sizeof(TaskList), DMA_READ_TASKLIST);
45 } else {
46 list = (TaskListPtr)params_addr;
47 }
48 } 42 }
49 43
50 SchedTaskBase* 44 SchedTaskBase*
51 SchedTaskList::next(Scheduler *scheduler, SchedTaskBase *p) 45 SchedTaskList::next(Scheduler *scheduler, SchedTaskBase *p)
52 { 46 {
55 __debug("[SchedTaskList:%s]\n", __FUNCTION__); 49 __debug("[SchedTaskList:%s]\n", __FUNCTION__);
56 50
57 scheduler->dma_wait(DMA_READ_TASKLIST); 51 scheduler->dma_wait(DMA_READ_TASKLIST);
58 if (list->length < 1) { 52 if (list->length < 1) {
59 nextSched = new SchedNop2Ready(scheduler); 53 nextSched = new SchedNop2Ready(scheduler);
60
61 if (flag_renewTaskList == SCHED_TASKLIST_RENEW) {
62 free(list);
63 }
64
65 } else { 54 } else {
66 TaskPtr nextTask = &list->tasks[0]; 55 TaskPtr nextTask = &list->tasks[0];
67 nextSched = createSchedTask(scheduler, nextTask); 56 nextSched = createSchedTask(scheduler, nextTask);
68 ((SchedTask*)nextSched)->init(list, nextTask, 1, 57 ((SchedTask*)nextSched)->init(list, nextTask, 1,
69 scheduler); 58 scheduler);