Mercurial > hg > Members > kono > Cerium
view 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 source
#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); } }