Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 240 → Rev 241

/shark/trunk/ports/first/modules/posixstar.c
44,8 → 44,7
#include <kernel/func.h>
#include <kernel/trace.h>
#include "posixstar.h"
#include "cbsstar.h"
#include "comm_message.h"
#include "fsf_server.h"
 
//#define POSIXSTAR_DEBUG
 
237,38 → 236,6
 
}
 
static int POSIXSTAR_private_change_level(LEVEL l, PID p)
{
 
POSIXSTAR_level_des *lev = (POSIXSTAR_level_des *)(level_table[l]);
 
/* Change task level */
if (lev->flag[p] & POSIXSTAR_CHANGE_LEVEL) {
STD_command_message msg;
proc_table[p].status = SLEEP;
 
level_table[lev->scheduling_level]->private_extract(lev->scheduling_level,p);
iq_extract(p,&lev->ready[lev->priority[p]]);
 
POSIXSTAR_private_scheduler(lev);
 
lev->nact[p] = 0;
lev->budget[p] = -1;
proc_table[p].task_level = lev->new_level[p];
msg.command = STD_ACTIVATE_TASK;
level_table[lev->new_level[p]] -> public_message(lev->new_level[p],p,&msg);
 
return 1;
 
}
 
return 0;
 
}
 
static void POSIXSTAR_public_epilogue(LEVEL l, PID p)
{
POSIXSTAR_level_des *lev = (POSIXSTAR_level_des *)(level_table[l]);
277,8 → 244,6
kern_printf("(PS:Epi:%d)",p);
#endif
 
if (POSIXSTAR_private_change_level(l,p)) return;
if (p==lev->activated) {
if (lev->yielding) {
lev->yielding = 0;
388,8 → 353,6
static int POSIXSTAR_public_message(LEVEL l, PID p, void *m)
{
POSIXSTAR_level_des *lev = (POSIXSTAR_level_des *)(level_table[l]);
STD_command_message *msg;
NRT_TASK_MODEL *nrt;
 
#ifdef POSIXSTAR_DEBUG
kern_printf("(PS:Msg:%d)",p);
400,8 → 363,6
/* Task EndCycle */
case (long)(NULL):
 
if (POSIXSTAR_private_change_level(l,p)) return 0;
 
if (lev->nact[p] > 0) {
/* continue!!!! */
lev->nact[p]--;
427,56 → 388,8
 
default:
 
msg = (STD_command_message *)m;
 
switch(msg->command) {
case STD_SET_NEW_LEVEL:
break;
lev->flag[p] |= POSIXSTAR_CHANGE_LEVEL;
lev->new_level[p] = (int)(msg->param);
 
break;
case STD_SET_NEW_MODEL:
 
nrt = (NRT_TASK_MODEL *)(msg->param);
 
lev->priority[p] = nrt->weight;
if (nrt->slice) {
lev->new_slice[p] = nrt->slice;
} else {
lev->new_slice[p] = 0;
}
if (nrt->policy == NRT_RR_POLICY)
lev->new_control[p] |= CONTROL_CAP;
if (nrt->arrivals == SAVE_ARRIVALS)
lev->nact[p] = 0;
else
lev->nact[p] = -1;
lev->flag[p] = 0;
 
break;
case STD_ACTIVATE_TASK:
 
if (lev->new_slice[p]) {
proc_table[p].avail_time = lev->new_slice[p];
proc_table[p].wcet = lev->new_slice[p];
} else {
proc_table[p].avail_time = lev->slice;
proc_table[p].wcet = lev->slice;
}
 
proc_table[p].control |= lev->new_control[p];
 
POSIXSTAR_public_activate(l,p);
 
break;
}
 
}
 
return 0;