Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 933 → Rev 932

/shark/trunk/ports/first/first-sync.c
122,15 → 122,6
 
}
 
int restart_task(PID p) {
int budget, local_scheduler_level, scheduler_id;
fsf_server_id_t server;
 
fsf_get_server(p, &server);
fsf_settask_preemptive(&server, p);
return task_activate(p);
}
 
int fsf_schedule_timed_job
(const struct timespec *at_absolute_time,
struct timespec *next_budget,
138,13 → 129,10
bool *was_deadline_missed,
bool *was_budget_overran)
{
 
TIME T,Q,D;
int budget, local_scheduler_level, scheduler_id;
SYS_FLAGS f;
fsf_server_id_t server;
 
f=kern_fsave();
 
local_scheduler_level = SERVER_get_local_scheduler_level_from_pid(fsf_server_level, exec_shadow);
scheduler_id = SERVER_get_local_scheduler_id_from_pid(fsf_server_level, exec_shadow);
 
169,10 → 157,7
break;
}
 
if (budget == -1) {
kern_frestore(f);
return FSF_ERR_BAD_ARGUMENT;
}
if (budget == -1) return FSF_ERR_BAD_ARGUMENT;
 
if (next_budget != NULL && next_period != NULL) {
 
194,11 → 179,8
if (was_budget_overran != NULL)
*was_budget_overran = false;
 
if (at_absolute_time != NULL) {
fsf_get_server(exec_shadow, &server);
fsf_settask_nopreemptive(&server, exec_shadow);
kern_event_post(at_absolute_time, (void (*)(void *))restart_task, (void *)(exec_shadow));
}
if (at_absolute_time != NULL)
kern_event_post(at_absolute_time, (void (*)(void *))task_activate, (void *)(exec_shadow));
 
#ifdef FSF_DEBUG
if (at_absolute_time != NULL)
207,7 → 189,6
kern_printf("(End Cycle %d)",exec_shadow);
#endif
 
kern_frestore(f);
task_endcycle();
 
return 0;
225,17 → 206,11
TIME T,Q,D;
int index,oldindex;
int budget, local_scheduler_level, scheduler_id;
SYS_FLAGS f;
 
f=kern_fsave();
local_scheduler_level = SERVER_get_local_scheduler_level_from_pid(fsf_server_level, exec_shadow);
scheduler_id = SERVER_get_local_scheduler_id_from_pid(fsf_server_level, exec_shadow);
 
if (proc_table[exec_shadow].task_level != local_scheduler_level) {
kern_frestore(f);
return 0;
}
if (proc_table[exec_shadow].task_level != local_scheduler_level) return 0;
switch (scheduler_id) {
case FSF_POSIX:
245,18 → 220,13
budget = EDFSTAR_getbudget(local_scheduler_level, exec_shadow);
break;
case FSF_RM:
budget = RMSTAR_getbudget(local_scheduler_level, exec_shadow);
default:
budget = -1;
break;
}
 
if (budget == -1) {
kern_frestore(f);
return FSF_ERR_BAD_ARGUMENT;
if (budget == -1) return FSF_ERR_BAD_ARGUMENT;
 
}
 
if (next_budget != NULL && next_period != NULL) {
 
SERVER_getbudgetinfo(fsf_server_level, &Q, &T, &D, budget);
284,10 → 254,7
index = (index + 1) % MAX_HASH_ENTRY;
// find
while (htable[index].id != synch_handle && index!=oldindex) index=(index+1) % MAX_HASH_ENTRY;
if (index==oldindex) {
kern_frestore(f);
return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE;
}
if (index==oldindex) return FSF_ERR_INVALID_SYNCH_OBJ_HANDLE;
}
 
if (htable[index].events > 0) {
300,9 → 267,8
kern_printf("(Synch_Handle Events %d)",synch_handle->events);
#endif
 
kern_frestore(f);
task_endcycle();
 
task_endcycle();
return 0;
 
}