diff TaskManager/Cell/CellTaskInfo.cc @ 32:f7fd92a1d7bb

*** empty log message ***
author gongo
date Tue, 12 Feb 2008 14:48:35 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/CellTaskInfo.cc	Tue Feb 12 14:48:35 2008 +0900
@@ -0,0 +1,69 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "CellTaskInfo.h"
+
+#define ROUND_UP_ALIGN(value, alignment) \
+    (((value) + ((alignment) - 1))&(~((alignment)-1)))
+
+#define NEXT_ADDR(addr, size) \
+    (TaskListPtr)((int)(addr) + (size))
+int
+CellTaskInfo::extend_pool_taskList(int num)
+{
+    TaskListPtr q, p;
+    int unit_size;
+
+    
+    unit_size = (ROUND_UP_ALIGN(sizeof(TaskList), 16));
+    posix_memalign((void**)&q, 16, unit_size*(num+1));
+
+    if (q == NULL) {
+	return -1;
+    }
+    
+    q->next = taskListPool;
+    taskListPool = q;
+    
+    /* Connect all free pack_list in the pool */
+    q = NEXT_ADDR(taskListPool,unit_size); // q = taskListPool + 1;
+    for (; --num > 0; q = NEXT_ADDR(q + unit_size)) {
+	q->next = NEXT_ADDR(q, unit_size) // q->next = q + 1;
+    }
+    q->next = freeTaskList;
+    freeTaskList = NEXT_ADDR(taskListPool, unit_size);
+
+    return 0;
+}
+
+TaskListPtr
+CellTaskInfo::get_available_taskList(void)
+{
+    TaskListPtr list, q;
+
+    list = machineTaskList[0];
+
+    while (list->next) list = list->next;
+
+    if (list->length < TASK_MAX_SIZE) {
+	return list;
+    } else {
+	q = get_free_taskList();
+	machineTaskList[0] = append_taskList(machineTaskList[0], q);
+	return q;
+    }
+}
+
+void
+CellTaskInfo::clear_taskList(void)
+{
+    TaskListPtr p, p1;
+
+    machineTaskList[0]->length = 0;
+
+    p = machineTaskList[0]->next;
+    while (p) {
+	p1 = p;
+	p = p->next;
+	free_taskList(p1);
+    }
+}