Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 880 → Rev 881

/shark/trunk/ports/first/first-server.c
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