view TaskManager/kernel/ppe/TaskManagerImpl.cc @ 18:0c9341da4522

*** empty log message ***
author gongo
date Sun, 10 Feb 2008 11:39:21 +0900
parents 75f184d16fa5
children aa11038dbdc1
line wrap: on
line source

#include <stdio.h>
#include "TaskManagerImpl.h"

void
noaction(void)
{
}

TaskManagerImpl::TaskManagerImpl(int num)
{
    machineNum = num;
}

HTaskPtr
TaskManagerImpl::create_task(int cmd, int size,
			 unsigned long long in_addr, 
			 unsigned long long out_addr,
			 void (*func)(void))
{
    HTaskPtr new_task;

    new_task = taskInfo->get_free_task(cmd, size, in_addr, out_addr);

    if (func == NULL) {
	new_task->post_func = noaction;
    } else {
	new_task->post_func = func;
    }

    return new_task;
}

/**
 * task の依存関係を設定
 * master task が終わってから、slave task を実行するように
 */
void
TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave)
{
    TaskQueuePtr m, s;

    m = taskInfo->get_free_taskQueue(master);
    s = taskInfo->get_free_taskQueue(slave);

    master->wait_me = append_taskQueue(master->wait_me, s);
    slave->wait_i = append_taskQueue(slave->wait_i, m);
}

void
TaskManagerImpl::spawn_task(HTaskPtr task)
{
    if (task->wait_i == NULL) {
	taskInfo->append_activeTask(task);
    } else {
	taskInfo->append_waitTask(task);	
    }
}