26,6 → 26,7 |
#include "edfstar.h" |
#include "nonestar.h" |
#include "rmstar.h" |
#include "tdstar.h" |
|
#include <pthread.h> |
#include <stdlib.h> |
150,6 → 151,10 |
case FSF_NONE: |
local_scheduler_level = NONESTAR_register_level(fsf_server_level); |
break; |
case FSF_TABLE_DRIVEN: |
kern_printf("Register level"); |
local_scheduler_level = TDSTAR_register_level(fsf_server_level); |
break; |
} |
|
if (contract->d_equals_t == true) { |
741,18 → 746,19 |
|
case FSF_TABLE_DRIVEN: |
{ |
DUMMY_TASK_MODEL dt; |
dummy_task_default_model(dt); |
HARD_TASK_MODEL ht; |
hard_task_default_model(ht); |
hard_task_def_aperiodic(ht); |
|
dummy_task_def_arg(dt,arg); |
dummy_task_def_level(dt,local_scheduler_level); |
hard_task_def_arg(ht,arg); |
hard_task_def_level(ht,local_scheduler_level); |
|
*thread = task_create("TDSTAR", thread_code, &dt, NULL); |
*thread = task_create("TDSTAR", thread_code, &ht, NULL); |
if (*thread == NIL) |
return FSF_ERR_INTERNAL_ERROR; |
|
TDSTAR_setbudget(local_scheduler_level, *thread, (int)(server)); |
TDSTAR_settable(local_scheduler_level, (fsf_table_driven_params_t *)(local_scheduler_arg->params)); |
TDSTAR_settable(local_scheduler_level, (fsf_table_driven_params_t *)(local_scheduler_arg->params),*thread); |
} |
break; |
|
1175,4 → 1181,24 |
return fsf_get_budget_and_period(service_server, budget, period); |
|
} |
|
|
int fsf_init_local_scheduler(fsf_server_id_t server, |
fsf_sched_init_info_t info) { |
int scheduler_id, local_scheduler_level; |
|
struct timespec *duration=(struct timespec *)info; |
|
local_scheduler_level=SERVER_get_local_scheduler_level_from_budget(fsf_server_level, server); |
scheduler_id = SERVER_get_local_scheduler_id_from_budget(fsf_server_level,server); |
|
if (scheduler_id!=FSF_TABLE_DRIVEN) |
return FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE; |
|
if (duration->tv_sec < 0 || duration->tv_nsec > 1000000000) |
return FSF_ERR_BAD_ARGUMENT; |
|
//TDSTAR_debugtable(local_scheduler_level); |
TDSTAR_start_simulation(local_scheduler_level); |
return 0; |
|
} |