17,12 → 17,8 |
#include <modules/hartport.h> |
#include <modules/cabs.h> |
|
#include "fsf_basic_types.h" |
#include "fsf_configuration_parameters.h" |
#include "fsf_core.h" |
#include "fsf_server.h" |
#include "fsf.h" |
#include "fsf_service_task.h" |
#include "fsf_hierarchical.h" |
#include "message.h" |
|
#include "posixstar.h" |
79,10 → 75,14 |
void FSF_start_service_task(void) { |
|
int err; |
struct timespec default_period = {0,50000000}; |
struct timespec default_budget = {0,1000000}; |
struct timespec default_period = FSF_SERVICE_THREAD_PERIOD; |
struct timespec default_budget = FSF_SERVICE_THREAD_BUDGET; |
DUMMY_TASK_MODEL m; |
fsf_sched_params_t pr; |
|
pr.policy=FSF_NONE; |
pr.params=&m; |
|
dummy_task_default_model(m); |
|
// create the service task |
98,7 → 98,7 |
negotiate_contract(&service_contract,&service_server); |
|
//server_task = task_create("stask",service_task,model,NULL); |
err = fsf_create_thread(service_server,&server_task,NULL,service_task,NULL,&m); |
err = fsf_create_local_thread(service_server,&pr, &server_task,NULL,(fsf_thread_code_t)service_task,NULL); |
if (err) { |
cprintf("error creating service task\n"); |
sys_shutdown_message("Could not create service_task"); |
445,6 → 445,9 |
return FSF_ERR_UNKNOWN_APPSCHEDULED_THREAD; |
|
scheduler_id = SERVER_get_local_scheduler_id_from_budget(fsf_server_level,server); |
|
if (scheduler_id!=sched_params->policy) |
return FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE; |
|
/* Check if thread is already bind */ |
switch(scheduler_id) { |
451,8 → 454,8 |
|
case FSF_RM: |
{ |
TASK_MODEL *m=(TASK_MODEL*)sched_params; |
HARD_TASK_MODEL *h=(HARD_TASK_MODEL *)sched_params; |
TASK_MODEL *m=(TASK_MODEL*)(sched_params->params); |
HARD_TASK_MODEL *h=(HARD_TASK_MODEL *)(sched_params->params); |
|
if (m->pclass != HARD_PCLASS) |
return FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE; |
474,8 → 477,8 |
|
case FSF_EDF: |
{ |
TASK_MODEL *m=(TASK_MODEL*)sched_params; |
HARD_TASK_MODEL *h=(HARD_TASK_MODEL *)sched_params; |
TASK_MODEL *m=(TASK_MODEL*)(sched_params->params); |
HARD_TASK_MODEL *h=(HARD_TASK_MODEL *)(sched_params->params); |
|
if (m->pclass != HARD_PCLASS) |
return FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE; |
495,7 → 498,7 |
|
case FSF_POSIX: |
{ |
TASK_MODEL *m=(TASK_MODEL*)sched_params; |
TASK_MODEL *m=(TASK_MODEL*)(sched_params->params); |
|
if (m->pclass != NRT_PCLASS) |
return FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE; |
519,7 → 522,7 |
SYS_FLAGS f; |
f=kern_fsave(); |
msg->command = STD_SET_NEW_MODEL; |
msg->param = (void *)(sched_params); |
msg->param = (void *)(sched_params->params); |
level_table[local_scheduler_level]->public_message(local_scheduler_level,thread,msg); |
|
msg->command = STD_SET_NEW_LEVEL; |
584,13 → 587,13 |
return 0; |
} |
|
int fsf_create_thread |
(fsf_server_id_t server, |
pthread_t *thread, |
pthread_attr_t *attr, |
fsf_thread_code_t thread_code, |
void *arg, |
void *local_scheduler_arg) |
int fsf_create_local_thread |
(fsf_server_id_t server, |
fsf_sched_params_t *local_scheduler_arg, |
pthread_t *thread, |
pthread_attr_t *attr, |
fsf_thread_code_t thread_code, |
void *arg) |
{ |
|
int local_scheduler_level,scheduler_id; |
879,6 → 882,19 |
|
} |
|
bandwidth_t SERVER_return_bandwidth() { |
int i=0; |
bandwidth_t U; |
U=0; |
for(i=0;i<current_server;i++) { |
|
U+=server_list[i].Umin; |
|
} |
|
return U; |
} |
|
int recalculate_contract(bandwidth_t U) { |
bandwidth_t current_bandwidth; |
unsigned int temp_U; |
896,7 → 912,7 |
#endif |
|
/* The current bandwidth is the min bandwidth */ |
//current_bandwidth=SERVER_return_bandwidth(fsf_server_level); |
current_bandwidth=SERVER_return_bandwidth(fsf_server_level); |
#ifdef FSF_DEBUG |
kern_printf("(nserver %d)", current_server); |
#endif |