14,7 → 14,6 |
#include "fsf_contract.h" |
#include "cbsstar.h" |
#include "posixstar.h" |
#include "rmstar.h" |
#include "edfstar.h" |
#include "posix.h" |
#include "comm_message.h" |
57,7 → 56,6 |
local_scheduler_level = EDFSTAR_register_level(fsf_cbsstar_level); |
break; |
case FSF_SCHEDULER_RM: |
local_scheduler_level = RMSTAR_register_level(fsf_cbsstar_level); |
break; |
} |
|
212,30 → 210,7 |
free(msg); |
|
break; |
|
case FSF_SCHEDULER_RM: |
|
if (RMSTAR_getbudget(local_scheduler_level,thread) != -1) |
return FSF_ERR_BIND_THREAD; |
|
/* Set server on local scheduler */ |
RMSTAR_setbudget(local_scheduler_level,thread,(int)(server)); |
|
/* Send change level command to posix level */ |
msg = (STD_command_message *)malloc(sizeof(STD_command_message)); |
|
#ifdef FSF_DEBUG |
kern_printf("(MSG RMSTAR LEV %d SEV %d THR %d)",local_scheduler_level,server,thread); |
#endif |
|
msg->command = STD_SET_NEW_MODEL; |
msg->param = (void *)(rt_arg); |
level_table[local_scheduler_level]->public_message(local_scheduler_level,thread,msg); |
|
msg->command = STD_SET_NEW_LEVEL; |
msg->param = (void *)(local_scheduler_level); |
task_message(msg,thread,0); |
|
default: |
return FSF_ERR_BIND_THREAD; |
break; |
321,32 → 296,6 |
break; |
|
case FSF_SCHEDULER_RM: |
|
if (RMSTAR_getbudget(local_scheduler_level,thread) == -1) |
return FSF_ERR_UNBIND_THREAD; |
else { |
|
STD_command_message *msg; |
NRT_TASK_MODEL nrt; |
|
nrt_task_default_model(nrt); |
nrt_task_def_save_arrivals(nrt); |
|
/* Send change level command to local scheduler */ |
msg = (STD_command_message *)malloc(sizeof(STD_command_message)); |
|
msg->command = STD_SET_NEW_MODEL; |
msg->param = (void *)(&nrt); |
level_table[fsf_posix_level]->public_message(fsf_posix_level,thread,msg); |
|
msg->command = STD_SET_NEW_LEVEL; |
msg->param = (void *)(fsf_posix_level); |
task_message(msg,thread,0); |
|
free(msg); |
|
} |
|
break; |
} |
|
416,10 → 365,7 |
case FSF_SCHEDULER_POSIX: |
return POSIXSTAR_getbudget(local_scheduler_level,thread); |
case FSF_SCHEDULER_EDF: |
return EDFSTAR_getbudget(local_scheduler_level,thread); |
case FSF_SCHEDULER_RM: |
return RMSTAR_getbudget(local_scheduler_level,thread); |
default: |
return -1; |
} |
|
453,16 → 399,7 |
|
break; |
case FSF_SCHEDULER_EDF: |
/* Check if some thread use the server */ |
if(EDFSTAR_budget_has_thread(local_scheduler_level,*server)) |
return FSF_ERR_SERVER_USED; |
break; |
|
case FSF_SCHEDULER_RM: |
/* Check if some thread use the server */ |
if(RMSTAR_budget_has_thread(local_scheduler_level,*server)) |
return FSF_ERR_SERVER_USED; |
|
break; |
} |
|