Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 338 → Rev 339

/shark/trunk/ports/first/modules/mpegstar.c
62,19 → 62,9
int current;
int scheduling_level;
int cap_lev;
 
} MPEGSTAR_level_des;
 
 
 
static void capacity_handler(void *l)
{
MPEGSTAR_level_des *lev = l;
lev->cap_lev = NIL;
event_need_reschedule();
}
 
static int MPEGSTAR_public_eligible(LEVEL l, PID p)
{
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]);
108,7 → 98,6
static void MPEGSTAR_public_dispatch(LEVEL l, PID p, int nostop)
{
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]);
struct timespec ty;
 
#ifdef MPEGSTAR_DEBUG
kern_printf("(MS:Dsp:%d)",p);
115,14 → 104,8
#endif
 
if (!nostop) {
TIMESPEC_ASSIGN(&ty, &schedule_time);
 
/* ...and finally, we have to post a capacity event on exec task because the shadow_task consume
* capacity on exe task always */
ADDUSEC2TIMESPEC(proc_table[p].avail_time ,&ty);
lev->cap_lev = kern_event_post(&ty,capacity_handler, lev);
level_table[ lev->scheduling_level ] ->
private_dispatch(lev->scheduling_level, p, nostop);
level_table[ lev->scheduling_level ] ->
private_dispatch(lev->scheduling_level, p, nostop);
}
 
}
130,10 → 113,6
static void MPEGSTAR_public_epilogue(LEVEL l, PID p)
{
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]);
if (lev->cap_lev!=NIL) {
kern_event_delete(lev->cap_lev);
lev->cap_lev=NIL;
}
 
#ifdef MPEGSTAR_DEBUG
kern_printf("(MS:Epi:%d)",p);
183,13 → 162,10
 
lev->current = NIL;
 
kern_printf("(Ext %d)",p);
#ifdef MPEGSTAR_DEBUG
kern_printf("(MS:EndCycle:%d)",p);
#endif
 
if (lev->cap_lev != NIL) {
kern_event_delete(lev->cap_lev);
lev->cap_lev = NIL;
}
 
level_table[ lev->scheduling_level ]->
private_extract(lev->scheduling_level, p);
 
245,6 → 221,8
 
lev->budget = NIL;
lev->current = NIL;
lev->server_Q = 0;
lev->server_T = 0;
 
lev->scheduling_level = master;
 
281,8 → 259,9
 
}
 
int MPEGSTAR_rescale(LEVEL l, TIME Q, TIME T)
int MPEGSTAR_rescale(int budget, TIME Q, TIME T)
{
LEVEL l = SERVER_get_local_scheduler_level_from_budget(fsf_get_server_level(),budget);
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]);
 
SERVER_adjust_budget(lev->scheduling_level,Q,T,lev->budget);